Jag har sett en hel del som har haft problem med global.asa-filen i detta forum men har aldrig fått nån riktig förklaring. Nu sitter jag själv och prövar och har insett att det inte är riktigt solklart. Problemet är helt klart att Session_OnEnd aldrig körs. Jag har testat med att på första sidan skapa en session (timeout=1) vilket gör att session_OnStart körs, på en andra sida kör jag session.abandon() men aldrig att den har kommit till Session_OnEnd...puhhh
Här kommer min global.asa (jag testar därav hårdkodningen i sql'n)
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart()
Application("NumberofVisitors") = 0
End Sub
Sub Session_OnStart()
Set con=Server.CreateObject("ADODB.Connection")
con.Open "driver=etc....
Application("NumberofVisitors") = Application("NumberofVisitors") + 1
session.timeout = 1
sql = "UPDATE user SET online=1 WHERE userId=1"
con.execute(sql)
sql2 = "UPDATE user SET online=1 WHERE userId=2"
con.execute(sql2)
End Sub
Sub Session_OnEnd()
Set con=Server.CreateObject("ADODB.Connection")
con.Open "driver=etc...
Application("NumberofVisitors") = Application("NumberofVisitors") + 5
sql3 = "UPDATE user SET online=0 WHERE userId=2"
con.execute(sql3)
End Sub
Sub Application_OnEnd()
Application("NumberofVisitors") = 0
End Sub
</SCRIPT>
och ja, den ligger i roten och jag har testat att vänta i 20min....
och på grund av hårdkodningen kommer du aldrig kunna se om session_onend triggas eller inte eftersom så fort du laddar om sidan så triggas session_onstart och "användarna" sätts i online läge igen.
[r]
ta bort dbkoden i session_onstart och gå in manuellt i databasen och sätt rätt användare till online. gå sedan till sidan och stäng alla browserfönster eller ha en länk som går till en sida som kör session.abandon.
Därefter kan du sedan kika manuellt i databasen om värdet för användaren har ändrats
[/r]
Men Patrik, jag har även väntat ut sessionen då borde väl koden i session_OnEnd köras (om man tittar manuellt i db'n efter att tiden gått ut)? Jag förstår att när man försöker uppdatera en sida där man skapat sessionen så innebär det att _OnStart körs igen. Jag testade ändå det du sa men utan framgång. Jag inser att jag gjort nåt fel nånstans, frågan är bara VAR...
Nu har jag kommit så långt så att första raden i session_onend körs men inte de övriga :q finns det nån som har nån idé om vad det kan bero på?
Sub Session_OnEnd()
Application("NumberofVisitors") = Application("NumberofVisitors") + 1000
Set con=Server.CreateObject("ADODB.Connection")
con.Open "driver={Microsoft Access Driver
(*.mdb)};dbq="& Server.MapPath("\forum\db\Lforum.mdb")
sql3 = "UPDATE user SET online=1 WHERE userId=2"
con.execute(sql3)
End Sub
Är det ingen som kan svara på min fråga? Jag testar och har testat men snart är det inte roligt längre... x(
Problemet är att bara första raden i session_onend körs. Varför kan inte koden för uppdateringen av db'n köras?
Här är hela min global.asa
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Application_OnStart()
Application("NumberofVisitors") = 0
End Sub
Sub Session_OnStart()
Set con=Server.CreateObject("ADODB.Connection")
con.Open "driver={Microsoft Access Driver
(*.mdb)};dbq="& Server.MapPath("\forum\db\Lforum.mdb")
Application("NumberofVisitors") = Application("NumberofVisitors") + 1
session.timeout = 1
sql = "UPDATE user SET online=1 WHERE userId=3"
con.execute(sql)
End Sub
Sub Session_OnEnd
Application("NumberofVisitors") = Application("NumberofVisitors") + 1000
Set con=Server.CreateObject("ADODB.Connection")
con.Open "driver={Microsoft Access Driver
(*.mdb)};dbq="& Server.MapPath("\forum\db\Lforum.mdb")
sql = "UPDATE user SET online=1 WHERE userId=1"
con.execute(sql)
End Sub
Sub Application_OnEnd()
Application("NumberofVisitors") = 0
End Sub
</SCRIPT>
Det verkar som att session_onend inte vill ändra i databaser.
Jag fick det att göra det ett fåtal gånger men det gav upp till slut...
Application verkar därimot fungera utmärkt!
PatrikB, om du tittar lite mer på sql-satserna så kommer du märka att jag jag gör online=1 på olika userId i session_onstart och session_onend ;). Online-kolumnen är av typen J/N och är default = 0.
Det här med session_onend verkar för mig vara en stor bugg i asp, kan det verkligen vara så här? :q
272 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e