webForumDet fria alternativet

Tömma korgen med global.asa

ASP

14 svar · 327 visningar · startad av Calippo

Medlem sedan aug. 2002536 inlägg
Frågan#1

Hallå

Jag får inte global.asa att dömma en korg vid Sub "Session_OnEnd".

Under "Sub Session_OnStart" skapar jag "session("strKundid")", den fungerar.

Men den här koden vill inte fungera;

Sub Session_OnEnd
Set Conn = Server.CreateObject("ADODB.Connection")
MdbFilePath = "C:\Inetpub\wwwroot\butik\butiken.mdb"
Conn.Open = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQLStmt = "DELETE FROM tblKorgen Where strKundid='"& session("strKundid") &"'"
Conn.Execute(SQLStmt)
SET SQLStmt = Nothing
Conn.Close
Set Conn=Nothing
End Sub

Medlem sedan juni 200032 967 inlägg
#2

Om jag inte missminner mig är det bara Session.SessionID som finns kvar i Session_OnEnd. Du får i så fall lagra det i kundvagnstabellen också om du vill kunna ta bort det i session_onend.

mvh

Medlem sedan aug. 2002536 inlägg
#3

I fältet strKundid i tabellen tblKorgen sparar jag värdet som session("strKundid") har.

Kanske skulle ta och använda session.sessionId istället då för jag fattade inte vad du menade.

Ökar session.sessionId alltid med 1 när en ny browser öppnas av en ny kund?

Medlem sedan juni 200032 967 inlägg
#4

Vad var det du inte förstod?

Ökar session.sessionId alltid med 1 när en ny browser öppnas av en ny kund?

Nä, men alla sessionsid är olika.

Medlem sedan aug. 2002536 inlägg
#5

"Om jag inte missminner mig är det bara Session.SessionID som finns kvar i Session_OnEnd."

Jag använder session("strKundid") istället

"Du får i så fall lagra det i kundvagnstabellen också om du vill kunna ta bort det i session_onend."

Jag antog att du menade att jag ska lagra session("strKundid") värdet i tabellen, det gör jag.

Men Session_OnEnd struntar i det.

Medlem sedan juni 200032 967 inlägg
#6

Jag menade att du skulle lagra Session.SessionID i tabellen också / istället, då jag inte tror du har tillgång till några av sessionsvariablerna i Session_OnEnd.

Och jag tror nog att jag tycker att det är bra att strunta i Session_OnEnd för detta. Jag skulle bli galen om min kundvagn tömdes utan att jag ville det, och antagligen skulle jag försöka hitta något annat ställe att handla på. ;)

mvh

Medlem sedan aug. 2002536 inlägg
#7

Ska man använda en cookie istället då?
Har ingen aning hur man lagrar korgen i en cookie...

Jag hämtar innehållet i korgen efter session:et.
Försvinner session:et så kan ju inte korgen visa rätt artiklar.
Det är därför jag tänkte tömma korgen för att den inte ska fyllas på med poster som inte används.

Medlem sedan aug. 2002536 inlägg
#8

Har ändrat till session.sessionid nu men det fungerar inte ändå, artiklarna ligger kvar i korgen när man stänger browsern.

Sub Session_OnEnd
Set Conn = Server.CreateObject("ADODB.Connection")
MdbFilePath = "C:\Inetpub\wwwroot\butik\butiken.mdb"
Conn.Open = "Driver={Microsoft Access Driver (*.mdb)}; DBQ=" & MdbFilePath & ";"
SQLStmt = "DELETE FROM tblKorgen Where intKundid="& Session.SessionID &""
Conn.Execute(SQLStmt)
SET SQLStmt = Nothing
Conn.Close
Set Conn=Nothing
End Sub

Medlem sedan juni 200032 967 inlägg
#9

Ja, servern har ju ingen aning om att du har stängt browsern.

Sessionen tar slut när timeouten inträffar, eller man kallar på Session.Abandon(). Då körs Session_OnEnd.

Medlem sedan aug. 2002536 inlägg
#10

Hmm, har mycket kvar o lära ser jag.

Om servern/datorn startas om, körs Session_OnEnd då?

Hur tycker du att jag ska lösa denna nöt?

Det vore bra om databasen kunde resas automatiskt på artiklar som bara läggs i korgen men inte beställs.

Medlem sedan juni 200032 967 inlägg
#11

Session_OnEnd körs ju när sessionen timeoutar. Kan du inte vänta tills dess?

Vad använder du för timeouttid?

Medlem sedan aug. 2002536 inlägg
#12

Lokalt på datorn är standard, 20 minuter tror jag.
På servern där den ska ligga sen är den 6 minuter.

Så du menar att korgen töms om man inte gör nåt på 6 minuter.
Om man stänger browsern då, hur ska man få den att tömma korgen?

Finns det nån nackdel att öka upp timouten till 20 minuter?
session.timout = 20 (det är minuter man räknar i eller?)

Hur "dödar" man eventuella sessions som man skapar på sidan om användaren bara stränger browsern?

Medlem sedan juni 200032 967 inlägg
#13

Så du menar att korgen töms om man inte gör nåt på 6 minuter.

Ja, den borde det.

Om man stänger browsern då, hur ska man få den att tömma korgen?

Det töms när timeouten inträffar och Session_OnEnd körs?

Ja, det är minuter man anger.

Hur "dödar" man eventuella sessions som man skapar på sidan om användaren bara stränger browsern?

Det gör man inte. Inte på något bra sätt i alla fall...

Medlem sedan aug. 2002536 inlägg
#14

Läste detta på webbhotellet vi ligger på:

----------------------
Fråga
Vad är default session timeout?

Svar
Vi har en sessionstid på 5 minuter som default, önskar man spara sessionerna längre så skriver man timeout=5 efter sessionen är skapad, tiden är i minuter.

Tänk på att inte lagra sessionerna på servern för lång tid (max 20 minuter) och att stänga sessionen när den har använts.
Om för mycket sessioner lagras i minnet så kommer servern behöva tömma minnet, det blir då ett avbrott på webtrafiken.
----------------------

Där skriver dom att man ska stänga den när den inte används.
Kanske skulle skicka ett mail till dom och fråga hur.

Medlem sedan juni 200032 967 inlägg
#15

De menar att du ska antingen köra abandon när du inte behöver sessionvariablerna längre, eller .Contents.Remove på specifika sessionsvariabler du inte längre behöver.

Vad är det för webhotell?

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