webForumDet fria alternativet

Sätt tabell till utloggad med global.asa?

ASP

9 svar · 281 visningar · startad av bigsky

Medlem sedan maj 2002821 inlägg
Frågan#1

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.

Medlem sedan dec. 1999707 inlägg
#2

Javisst går det. Sätt värdet till false i Session_OnEnd-subben. ASP-objekt som går att använda i den är: Application, Server och Session.

Medlem sedan maj 2002821 inlägg
#3

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>

Medlem sedan dec. 1999707 inlägg
#4

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

End Sub

Medlem sedan maj 2002821 inlägg
#5

Så här?

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

Medlem sedan okt. 20005 273 inlägg
#6

Felet kan ju bero på att Session_OnEnd inte alltid körs ........den gör liksom lite hur han vill ..... :(

Jag har inte kollat nått på koden så det kan ju vara där felet ligger :OO

Hoppas att det löser sig :birp

Medlem sedan dec. 1999707 inlägg
#7

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

Medlem sedan maj 2002821 inlägg
#8

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?

Medlem sedan aug. 2001226 inlägg
#9

lättare att använda
<body onload="oppnaWin()">
osså får du öppna ett litetr win som loggar ut å stänger sig själv (self.close();)

Medlem sedan dec. 1999707 inlägg
#10

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