global.asa verkar vara den fil som kan ställa till det mest av allt. Dess mystik är så stor att det finns knappt någon dokumentation om den, en smula irriterande enligt mig. Fick ordning på det! Det är ingen 100%-ig lösning, Session_OnEnd triggas inte alltid, så en del kommer vara online ända tills servern startas om tyvärr.. Du kan ju skippa öppningen av recordsetet. Slukar bara resurser i onödan: Jag använder inte Global.asa, jag infogar en kod som sparar senaste aktivitet i databasen... sen varjegång en användare flyttar sej på sidan uppdateras den... när man flyttar sej på sidan så har jag också ett script som kollar vilka som har senaste aktivitet mer än en timme sen och gör dom offline. Problemet är att förhoppningsvis så kommer det bli relativt många användare online. Likväl som att jag vill inte att någon skall loggas av förens dom stänger ner "browsern" om dom så önskar så får dom ligga och "idla" i flera dagar...Global.asa strul...
Men, mitt problem är följande. Jag vill ha en enkel autourloggning när en användare varit inaktiv i över 10 minuter eller stängt ner sitt browserfönster.
<code>
' När en användare loggar på så skriver jag in en 1'a i ett fält som heter online
' 1an skriver jag in i en annan fil som heter login.asp, dvs den har inget med global.asa att göra!
' När personen loggar in skriver jag även in SessionID't i ett fält som heter sessionNO.
' Min global.asa fil ser ut så här
<script Language="VBScript" RUNAT=Server>
Sub Application_OnStart()
End Sub
Sub Application_OnEnd()
End Sub
Sub Session_OnStart()
Session.Timeout = 10
Session.LCID = 1053
Application.Lock
Application("NumSession") = Application("NumSession") + 1
Application("NumVisited") = Application("NumVisited") + 1
Application.UnLock
End Sub
Sub Session_OnEnd()
Application.Lock
Application("NumSession") = Application("NumSession") - 1
Application.UnLock
set mySQLconn = Server.CreateObject("ADODB.Connection")
mySQLconn.Open "dsnusers"
Set rstemp = mySQLconn.execute("SELECT sessionNO FROM users WHERE sessionNO =" & Session.SessionID)
If not rstemp.eof then
' online = 0 (= avloggad)
mySQLconn.execute("UPDATE users SET online = 0 WHERE sessionNO =" & Session.SessionID)
end if
rstemp.close
set rstemp = nothing
mySQLconn.close
set mySQLconn = nothing
End sub
</script>
</code>
Hittar ni något fel?
Eller har jag gjort någon generaltabbe här?
Vore kul om någon visste!
Tacksam för svar
// ericSv: Global.asa strul...
med ovanstående kod, identisk.
Är fortfarande intresserad av tips över hur man kan förbättra den
// ericSv: Global.asa strul...
Sv: Global.asa strul...
<code>
Set mySQLconn = Server.CreateObject("ADODB.Connection")
mySQLconn.Open "dsnusers"
mySQLconn.Execute "UPDATE users SET online = 0 WHERE sessionNO =" & Session.SessionID
mySQLconn.Close
Set mySQLconn = Nothing
</code>Sv: Global.asa strul...
Blir ganska prestandakrävande på en större sida men om man specificerar koden tillräkligt så ska det nog gå bra..
den här koden includar jag på varje sida:
<code>
SQL = "update tabell set status='offline' where senasteaktivitet < '" & DateAdd("h",-1,now) & "' and status='online'"
rs.open SQl, Connect, 1,2
SQL = "update tabell set senasteaktivitet = '" & now & "' where id=" & session("id")
rs.open SQL, Connect, 1,2
</code>Sv: Global.asa strul...
Tack för tipsen!
// eric