På login- respektive logutsidan har jag gjort så att koden uppdaterar en tabell i databasen med True eller False. För att visa om en användare är in- eller utloggad. Problem uppstår ju dock om användaren inte väljer att logga ut, utan bara surfar vidare eller stänger webbläsaren. Kan man med global.asa också se till att tabellen uppdateras till False när användaren stänger webbläsaren eller surfar till en annan sida? För att täcka alla möjligheter så att säga..? Ungefär som när man i global.asa räknar sessions för att visa aktiva användare.
Hur skulle den koden i global.asa som uppdaterar tabellen i databasen till False se ut då? Så här har jag nu (men det är för att visa aktiva användare).
<script language=VBScript runat=Server>
Sub Session_OnStart()
Session.Timeout = 10
Application.Lock
Application("NumUsers") = CInt(Application("NumUsers")) + 1
Application.Unlock
End Sub
Sub Session_OnEnd()
Application.Lock
Application("NumUsers") = CInt(Application("NumUsers")) - 1
Application.Unlock
End Sub
</script>
På samma sätt som du sätter True i tabellen vid onStart. :) Antar att du använder dig av nyckeln för användarna som användarid lagrat i Session-variabel.
Sub Session_OnEnd
strSql = "UPDATE user SET online = false WHERE userID = " & Session("UserID")
...
<script language=VBScript runat=Server>
Sub Session_OnStart()
Session.Timeout = 10
Application.Lock
Application("NumUsers") = CInt(Application("NumUsers")) + 1
Application.Unlock
End Sub
Sub Session_OnEnd()
Application.Lock
Application("NumUsers") = CInt(Application("NumUsers")) - 1
Application.Unlock
Application.Lock
username = Session("username")
Dim ConnectStr, StatusConn
ConnectStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("bsa/members/skycity/data/members.mdb")
Set StatusConn = Server.CreateObject("ADODB.Connection")
StatusConn.Open ConnectStr
Set rsUpdate = Server.CreateObject("ADODB.Recordset")
rsUpdate.Open "users WHERE Username = '" & username & "' ", StatusConn, 3, 3
rsUpdate("Countsessions") = False
rsUpdate.Update
rsUpdate.Close
Set rsUpdate = Nothing
StatusConn.Close
Set StatusConn = Nothing
Application.Unlock
End Sub
</script>
Som det är nu får jag inga felmeddelanden, men tabellen uppdateras inte med värdet False om man bara surfar vidare eller stänger webbläsaren. Ser du nåt fel? Sökvägen gäller från wwwrooten eftersom att global.asa ligger där.
Om du surfar till en annan adress eller stänger webbläsaren så kommer inte Session_OnEnd köras - direkt vill säga - utan körs när sessionen får en timeout. Testa att logga ut (Session.Abandon) och se om det fungerar då.
Jo, det funkar om man loggar ut. Då jag i logout.asp kör med Session.Adandon. Men iden var ju att tabellen ska uppdateras med värdet False även om användaren "glömmer" bort att logga ut. Detta då med hjälp av global.asa. Men du säger alltså att global.asa kommer att uppdatera tabellen (med koden ovan) om utloggning inte sker, även om det inte händer på en gång. I detta fall efter 10 min som Session.Timout är satt till. Eller?
Men du säger alltså att global.asa kommer att uppdatera tabellen (med koden ovan) om utloggning inte sker, även om det inte händer på en gång. I detta fall efter 10 min som Session.Timout är satt till. Eller?
Precis.
253 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e