webForumDet fria alternativet

SessionId är inte det unikt?

ASP

6 svar · 218 visningar · startad av Lina

Medlem sedan jan. 2001332 inlägg
Frågan#1

Tjena allihop....

Nu har jag stött på ett konstigt fel som är trasigt... IGEN!

När jag gör en session.abandon nollställs session och alla variabler jag har lagt i session försvinner. Men när jag sedan går in på min sida och tittar i kundkorgen så ligger varorna kvar där....
Detta beror på att kundkorgen känner av befintligt sessionId och jämför det med ett fält för sessionId som jag har i databasen.
Men nu till min fråga...
Ska jag inte få ett nytt sessionId när jag går in på sidan efter att ha gjort en session.abandon???
Som det är nu får jag samma id hela tiden.....

Nån som vet vad som kan vara fel????

------------------
Du lever bara en gång och den gången är nu!

Medlem sedan dec. 1999707 inlägg
#2

Jo, man får ett nytt nummer när man gör en abandon och sen accessar asp-skript på nytt. Det finns ju en liiiten chans att du får samma nummer som innan men det är troligtivs inte det som är fel i ditt fall. Kanske cachas sidan på antingen servern eller klienten. Det tippar jag på. Jag föreslår att du sätter kundkorgssidan till att alltid refreshas då den anropas med:

Response.Expires = -1

Hoppas att det fungerar.

------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige

Medlem sedan jan. 2001332 inlägg
#3

Uppdatering på mitt problem....

Felet verkar bara uppstå när man går in på sidan i samma IE-fönster....

Stänger man ner hela webbläsaren får man ett nytt sessionId...

Alltså räcker det inte med att göra en session.Abandon. Man måste öppna ett nytt fönster i IE också...

Liten smärre bugg kanske...

Tack Toha, jag ska undersöka om ditt förslag hjälper!

------------------
Du lever bara en gång och den gången är nu!

Medlem sedan dec. 1999707 inlägg
#4

MS rekommenderar att man inte skall använda sessionid till att använda som primära nycklar i databasen eftersom det inte är unikt på något sätt. Vad man kan göra däremot är att tilldela en user ett GUID som är globalt unikt (ingen annan i världen kommer någonsin att få samma nummer). Eller att du lägger till en nyckel som ex. skulle kunna vara klientens ip-nummer. Då blir nyckeln:

- SessionId
- IP-address

------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige

Medlem sedan jan. 2001332 inlägg
#5

Hmm, kan vara så att jag missförstår lite, men vad jag vet använder jag inte sessionId som någon primärnyckel....

I min korgtabell i databasen lägger jag ner sessionId att användas som en identifiering av korgen medans kunden är inne i shopen och handlar. När kunden sedan lägger ordern raderas alla värden i denna tabell med villkoret att sessionId i tabellen är det samma som klientens sessionId....När kunden lägger ordern måste han/hon identifiera sig med kundlogin och då får jag ett kundId som läggs ner i databasen istället för sessionId:t...
Detta funkar jättebra ända tills jag börjar fundera vilka problem som kan uppkomma....

Om en kund bryter en session och bara går ut raderas posterna i tabellen automatiskt efter två dygn....

Men om kunden kommer tillbaka till sidan utan att ha startat om webbläsaren (innan dessa två dygn har gått) så får kunden upp de poster som lades in under förra besöket...

Jaja, det verkar ju inte finnas nån lösning för att komma ifrån detta så jag får väl leva med det....

------------------
Du lever bara en gång och den gången är nu!

Medlem sedan dec. 1999707 inlägg
#6

Då verkar det ju som du använder sessionid som en logisk nycket iaf. Men det spelar ju ingen roll för din lösning verkar vara helt ok. Men du, vore det inte bättre att rensa kundkorgen vid Session_OnEnd?

Men man skall inte få samma sessionid om man kommer tillbaka efter en abandon. Det har jag aldrig varit med om. Men du kan ju göra så att listar kundkorgen med varor som "plockades" inom tiden X i sådana fall.

------------------
/ Torbjörn Hansson, webbutvecklare
Endero Sverige

Medlem sedan feb. 20001 590 inlägg
#7

Men vad är problemet? Om samma kund ansluter igen är allt ha kan se sin egna varukorg. Ingen annans. Ett sessionsid ska inte kunna förekomma igen inom rimlig tidsgräns.
Att sessionsid på något sätt finns kvar är som du beskriver för att samma webbläsarsession används, och att du antagligen kör lokalt.

/T

------------------
"Den som väntar på någon som gått behöver inte vänta längre..."

560 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
430 ms — deklarationer (db)
0 ms — hämta statistik (cache)
124 ms — hämta tråd, inlägg och bilagor (db)
430 ms — ändringar (db)