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
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 *=-
ä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 !
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)
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."
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
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