Avatar billede jpv Nybegynder
05. juli 2004 - 00:12 Der er 6 kommentarer og
1 løsning

Sessionid hvor unik er den

Jeg skal bruge en unik session til en indkøbskurv, hvordan kan jeg være sikker på at den er unik og ikke er lavet til en anden for flere uger siden.
Jeg vil nødig have kunderne rodet sammen.
Avatar billede keysersoze Ekspert
05. juli 2004 - 00:27 #1
du kan være ret sikker på at det er et unik id så længe serveren ikke bliver genstartet - genstartes serveren er der en, omend minimal, så alligevel potentiel risiko for at et id genopstår
Avatar billede jpv Nybegynder
05. juli 2004 - 00:34 #2
Hvad kan jeg så gøre?
Avatar billede jpv Nybegynder
05. juli 2004 - 00:36 #3
kan jeg combinere dato sammen med den unikke fra serveren, hvis ja, hvordan gør jeg det
Avatar billede fixxxer Nybegynder
05. juli 2004 - 01:21 #4
Du kan jo bruge Year() Month() Day() Hour() Minute() og Second() og kombinere dem ved matematik sammen med din sessions id... så tror jeg ikke at det kan lade sig gøre at der kan opstå to ens id'er
Avatar billede Slettet bruger
05. juli 2004 - 04:09 #5
hvorfor ikke bare gennerere en 30 cifre lang streng som du kan gemme i en tabel i din database og tjekke for om er brugt hvergang en ny skal dannes ? på denne måde er du da helt sikker på at den er unik, uafhængigt af om server eller anden hardware genstartes.

mvh.
Questis
Avatar billede jpv Nybegynder
05. juli 2004 - 10:43 #6
Det lyder som en god ide, men rent kode mæssigt hvordan skulle det gøres?
Avatar billede Slettet bruger
05. juli 2004 - 14:46 #7
eks. i din database skal du have en tabel der hedder SessionID, med kolonnen UsedID.

i din indkøbs kurv skal du have et tjek for om brugeren allerede har et unikt session id:

Dim strSessinID
strSessionID = Request.Cookies("userid")

If strSessionID = "" Then
    strSessionID = CreateSessionID()
    Response.Cookies("userid") = strSessionID
End If


Funktionen der kaldes hvis ikke denne eksisterer:


<!-- METADATA TYPE="typelib" FILE="C:\Program Files\Common Files\System\ado\msado15.dll"  -->

<%
function CreateSessionID()
  dim strResult, strLetters, i, strSQL, objRS, objCMD
  dim intLen, intPos
  dim boolIdOK
  boolIdOK = FALSE
  while not boolIdOK
    Randomize
    strResult = ""
    strLetters = "abcdefghijklmnopqrstuvwxyz"
    intLen = len(strLetters)
    for i = 1 to 30
      intPos = cint(rnd()*intLen)+1
      strResult = strResult & mid(strLetters,intPos,1)
    next
    strSQL = "SELECT UsedID FROM SessionID WHERE UsedID = '" & strResult & "'"
    set objRS = server.createobject("ADODB.Recordset")
    with objRS
      .open strSQL, strConnect, adOpenForwardOnly, adLockReadOnly, adCmdText
      if not .EOF then
        boolIdOK = FALSE
      else
        boolIdOK = TRUE
        strSQL = "INSERT INTO SessionID (UsedID) VALUES ('" & strResult & "')"
        set objCMD = server.createobject("ADODB.Command")
        with objCMD
        .ActiveConnection = strConnect
        .CommandType = adCmdText
        .CommandText = strSQL
        .execute 
        end with
        set objCMD = Nothing
      end if
      .close
    end with
    set objRS = Nothing
  wend
  CreateSessionID = strResult
 
  response.write strResult
end function
%>

og ellers er resten af kruven vel lige til

mvh.
Questis
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