webForumDet fria alternativet

Kommer aldrig till Session_OnEnd...

ASP

8 svar · 316 visningar · startad av lolukokasos

Medlem sedan mars 2001196 inlägg
Frågan#1

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

Medlem sedan mars 20002 836 inlägg
#2

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]

cya,
PatrikB

Medlem sedan feb. 20001 590 inlägg
#3

Du får vänta sessionstiden ut dvs. 20 minuter.
Kör du IIS, kan du sänka värdet, eller som patrikb nämnde, köra session.abandon

/T

Medlem sedan mars 2001196 inlägg
#4

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

Medlem sedan mars 2001196 inlägg
#5

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
Medlem sedan mars 2001196 inlägg
#6

Ä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>

Please help ....

Medlem sedan jan. 2000189 inlägg
#7

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!

Medlem sedan mars 20002 836 inlägg
#8

Du sätter online=1 i både session_onstart och i session_onend .... då borde det inte visas ngn ändring eftersom ändringen du gör ger samma resultat

cya,
PatrikB

Medlem sedan mars 2001196 inlägg
#9

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
130 ms — deklarationer (db)
0 ms — hämta statistik (cache)
139 ms — hämta tråd, inlägg och bilagor (db)
130 ms — ändringar (db)