Avatar billede kokkens Nybegynder
01. april 2011 - 16:28 Der er 2 kommentarer

skift session ud med cookie

Private Sub Class_Initialize()
    if (not isObject(session("kurv"))) then
        'opretter kurven
        Set dicKurv = CreateObject("Scripting.Dictionary")
        set session("kurv") = dicKurv
    else
        'henter kurven
        set dicKurv = session("kurv")
    end if

    call upd8_kurv_total()
End Sub

Private Sub Class_Terminate()
      'gemmer kurven
    set session("kurv") = dicKurv
End Sub


er det mulighed at lave den her kode om sådan den køre på cookies eller ? har selv prøvet og det vil ikke funke for mig... håber nogle kan hjælpe
Avatar billede softspot Forsker
01. april 2011 - 23:34 #1
Du kunne oprette en tabel i din database, hvor du gemmer referencer til de varer kunden har puttet i kurven.

Der udover skal du generere en nøgle som lægges i en cookie og samtidig benyttes til de varer som kunden har lagt i kurven, dvs. et felt i databasekurven skal være cookienøglen.

Kurvtabellen kunne se således ud:

Kurv =
      noegle
    + vareid
    + antal
    + pris

Så kunne din klasse bla. indeholde følgende:

Class Kurv
Private dicKurv
Private ckey

Private Sub Class_Initialize()
    dim sql, cmd, rs, objVare
    set dicKurv = Server.CreateObject("Scripting.Dictionary")
    ckey = Request.Cookies("BASKET") & ""
    if ckey = "" then
        'opretter nøglen til kurven
        ckey = GenerateCookieKey()
        Response.Cookies("BASKET") = ckey
        Response.Cookies("BASKET").ExpiresAbsolute = DateAdd("h", 1, now)
    else
        'henter kurven
        sql = "SELECT * FROM kurv WHERE noegle = ?"
        set cmd = GetCommandObj(sql)
        set rs = cmd.Execute(, array(ckey))
        do while not rs.eof
            set objVare = new Vare
            objVare.Id = rs("vareid")
            objVare.Antal = rs("antal")
            objVare.Pris = rs("pris")
            dicKurv.Add "v" & rs("vareid"), objVare
            rs.movenext
        loop
        rs.Close
    end if

    call upd8_kurv_total()
End Sub

Private Sub Class_Terminate()
    dim sql, cmd, objVare
    'sletter kurven
    sql = "DELETE kurv WHERE noegle = ?"
    set cmd = GetCommandObj(sql)
    cmd.Execute , array(ckey)

    'gemmer kurven med evt. opdateringer
    sql = "INSERT INTO kurv (noegle, vareid, antal, pris) VALUES(?,?,?,?)"
    set cmd = GetCommandObj(sql)
    for each objVare in dicKurv
        With objVare
            cmd.Execute , array(ckey, .Id, .Antal, .Pris)
        End With
    next
End Sub

Private Function GetCommandObj(sql)
    dim cmd
    set cmd = Server.CreateObject("ADODB.Command")
    set cmd.ActiveConnection = conn
    cmd.CommandType = 1
    cmd.CommandText = sql
    set GetCommandObj = cmd
End Function

' anden logik til klassen her
' ... bla GenerateCookieKey

End Class

For at dette fungerer skal du implementere en metode på klassen (eller en funktion udenfor), som hedder GenerateCookieKey, der returnerer en nøgle som entydigt identificerer kurven ifht. den aktuelle bruger.

NB: Du skal være opmærksom på at hvis brugeren vælger samme vare to gange i shoppen, så skal varen i kurven opdateres med et nyt antal, da grundlaget for nøglen til dictionaryobjektet er vareid og der kan ikke eksistere to elementer i et dictioaryobjekt med samme nøgle.

Desuden skal der laves en klasse som hedder Vare med de værdier der nu skal gemmes om en vare i kurven (i mit eksempel er der 4 værdier). Noget i stil med dette:

Class Vare
    Public Noegle
    Public Id
    Public Antal
    Public Pris
End Class

Dette er naturligvis en helt simpel udgave af et vareobjekt og du har sikker andre oplysninger og funktioner du ønsker at knytte til en vare, men det er udenfor scopet af denne illustration ;-)
Avatar billede softspot Forsker
07. april 2011 - 18:06 #2
Kom du videre med dette?
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester