webForumDet fria alternativet

Global.asa, en gång för alla

ASP

7 svar · 324 visningar · startad av edebro

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

Jag tycks inte få global.asa att fungera som jag vill

Jag ska altså skriva till en databas när en användare lämnar sidan, med denna kod:

Sub Session_OnEnd
' öppna Access databasen
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/data.mdb")

' säg till databasen att personen är offline
Connect.Execute("UPDATE users SET Online = '' WHERE Username = '" & Session("username") & "'")

Connect.Close
Set Connect = Nothing


Application.Lock
	Application("Active") = Application("Active") - 1
Application.UnLock

End Sub

Det som är jävligt störande är att det fungerade för ca 3 dagar sen.
Jag har gjort lite ändringar sen dess, bland annat installerat SMTP tjänsten.

Varför fungerar det inte?
Det verkar som om global.asa gör lite som den vill tycker jag

Måste man ge just den filen några speciella rättigheter eller varför fungerar det inte?

Jag har provat både på MS SQL databaser och Access

Har ni några tips hur man ska ställa in det för att den ska fungera

Alla tips är välkommna

Jag kör IIS 5.1 under Windows XP

------------------
DivX Community

Medlem sedan mars 20002 836 inlägg
#2

Hello,

du kan inte använda dig av: Session("username") i Session_OnEnd

Det enda som du kan verifiera mot är: Session.SessionID som är den unika nyckeln för ett session och det enda som finns kvar när Session_OnEnd triggas.

Dvs, du måste ha ett fält med i tabellen som du spar SessionID i och sedan verifiera mot det fältet istället för Username fältet.

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

Medlem sedan dec. 19996 522 inlägg
#3

är det sannt ? damn därför inte detta har fungerat smärtfritt då alltså...

'	Sub Session_OnEnd
'		'PLOCKA BORT PERSONEN IFRÅN APPLICATION 
'		Application.Lock
'			strUserName = Session("UserName")
'			If strUserName <>"" and Application("Online")<>"" then
'				strTmp=Application("Online")
'				IntId =instr(strTmp,"*" & strUserName)
'				strTmp2=left(strTmp,IntId-1) & right(strTmp,len(strTmp)-IntId-len(strUserName))
'				Application("Online")=strTmp2
'			End If
'		Application.UnLock
'	End Sub

Men jag har ju sätt att folk har gjort så som jag har gjort ovan på flertalet exempel där de säger att de har fungerat. **riva hår**

------------------
Real mad hiphop flavaz kickin' it right from tha street without no FEAR, Yo !

Medlem sedan mars 20002 836 inlägg
#4

Går säkert att göra.
Som du vet så är inte dessa "triggers" speciellt bra. Funkar på vissa installationer medans det inte alls funkar på andra.

Det säkraste sättet är ändå att verifiera mot SessionID .....

Application() variabler är variabler som ALLA besökare kommer åt över hela siten, så de är nog inte speciellt bra att tex spara usernames i.

cya,
PatrikB

------------------
-=* IF there is a wrong way to do something, then someone will do it *=-

Medlem sedan aug. 2001261 inlägg
#5

patrikB......hmm, men det skumma är ju att det fungerade förr, med precis samma kod

Fast jag ska prova din metod iaf, den verkar säkrare : )

Du menar altså att jag ska göra ett fält i databasen där jag sätter värdet av Session.SessionID och sen öppna den posten sen i global.asa

Altså nåt så här:

Sub Session_OnEnd
' öppna Access databasen
Set Connect = Server.CreateObject("ADODB.Connection")
Connect.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("../db/data.mdb")

' säg till databasen att personen är offline
Connect.Execute( "UPDATE users SET Online = '' WHERE SessionID = " & Session.SessionID )

Connect.Close
Set Connect = Nothing

Application.Lock
Application("Active") = Application("Active") - 1
Application.UnLock
End Sub

då ska det altså fungera smärtfritt
Det är altså ingen inställning eller liknande som kan göra att det inte fungerar, för det som är störande är att jag vet fler än mig som använder Session("value") i global.asa(Session_onEnd)

Jaja, jag får testa, tack för tipset

------------------
DivX Community

Medlem sedan aug. 2001261 inlägg
#6

nu känner jag mig lite kluven, patrikB säger att man inte kan använda Session i Session_onEnd, men enligt detta inlägget verkar det gå endå http://cgi.webforum.nu/wf/Forum11/HTML/000008.html

för er som inte orkar läsa så kan jag dra en snutt

citat av toha

"Det verkar som om jag hade fel: session-egenskaper kan man använda sig av i session_OnEnd i global.asa.
Men vad jag ser i din kod är att du använder en session-variabel i Application_OnEnd och det går ju då rakt inte eftersom eventen inte ligger på användarnivå.

Jag också kommit fram till att det troligtvis är som du säger, att global.asa inte fungerar i PWS.
Jag använder själv PWS hemma men har inte använt mig av den innan."

------------------
DivX Community

Medlem sedan aug. 2001261 inlägg
#7

patrikB:

Går säkert att göra.
Som du vet så är inte dessa "triggers" speciellt bra. Funkar på vissa installationer medans det inte alls funkar på andra.

så du menar alltså att det fungerar på vissa installationer, man kan altså inte vara säker på att global.asa kommer att fungera på just sin installation eller?

Tycker hela skiten verkar vara en bugg, ska faan bombhota MS *arg som faan efter flera dagars försök* :D

------------------
DivX Community

Medlem sedan aug. 2001261 inlägg
#8

nu har jag gjort så här iaf, jag skapar en ny textfil i Session_onEnd funktionen, och det fungerar lite si och så.

Det verkar fungera när sessionen blir timeout, fast mindre bra när man stänger webbläsarfönstret

Sen har jag en till fråga, anropas Session_onEnd efter man gör: Session.Abandon?

Orsaken till att jag frågar är att jag ska slippa köra samma kod 2 ggr, dvs i logout.asp så sätter jag Session.Abandon, och då ger det ju inte så mycket att skriva till databasen om den lika gärna ska köra koden i Session_onEnd

Svar nån?

------------------
DivX Community

256 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
116 ms — deklarationer (db)
0 ms — hämta statistik (cache)
131 ms — hämta tråd, inlägg och bilagor (db)
122 ms — ändringar (db)