webForumDet fria alternativet

kolla onlineanvändare

ASP

9 svar · 332 visningar · startad av WebbisNet

Medlem sedan feb. 20032 027 inlägg
Frågan#1

Jag har satt Session.TimeOut=20 i en includefil som används på alla sidor.

Det jag vill veta nu är om man kan ha ex
if Session.TimeOut=False then
update tabell set ruta=false
end if

Ovanstående ska bocka av en ja/nej för att avmarkera användaren som online om sesionen är slut pga inaktivitet

Medlem sedan juni 200032 967 inlägg
#2

Nej, du måste använda global.asa och session_onend för att veta när en session dör.

Medlem sedan feb. 20032 027 inlägg
#3

@nders skrev:

Nej, du måste använda global.asa och session_onend för att veta när en session dör.

hur ka jag modifiera global.asa för att få önskat resultat?

min global.asa är nu

<script language="vbscript" runat="server">

Sub Application_OnStart
Session.TimeOut=1
Application("visitors")=0
End Sub

Sub Session_OnStart
Application.Lock
Application("visitors")=Application("visitors")+1
Application.UnLock
End Sub

Sub Session_OnEnd
Application.Lock
Application("visitors")=Application("visitors")-1
Application.UnLock
End Sub
</script>
Medlem sedan juni 200032 967 inlägg
#4

I session_onend kan du ställa en SQL-fråga med sessionid som villkor. Detta kräver förstås att du lagrar sessionid i tabellen du ska uppdatera.

Ett annat sätt är att man uppdaterar en aktivitetskolumn i användartabellen med datum och tid varje gång en sida exekvers, och för online-listan använder detta datum/tid-fält som villkor.

mvh

Medlem sedan feb. 20032 027 inlägg
#5

ska jag ha session.timeout=20 i global.asa och ha
den if-satsen som jag skrev från början där?

Medlem sedan juni 200032 967 inlägg
#6

Session.timeout behöver du inte ha, och den ifsatsen du visade fungerar inte. När du kommer till session_onend så tar sessionen slut, det behöver du inte kontrollera.

Medlem sedan feb. 20032 027 inlägg
#7

Kommer då detta att funka i Session_OnEnd

Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
SET objConn = connect()
objConn.Execute("Update tblUsers SET inloggad = False, Chattar=False WHERE userID="&Session("userID")&"")
objConn.Close
Set objConn = nothing
Medlem sedan juli 20015 107 inlägg
#8

WebbisNet skrev:

Kommer då detta att funka i Session_OnEnd

Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
SET objConn = connect()
objConn.Execute("Update tblUsers SET inloggad = False, Chattar=False WHERE userID="&Session("userID")&"")
objConn.Close
Set objConn = nothing

Jag är inte säker, men jag tror inte att det kommer att fungera, din Session("UserID") kommer inte att ha något värde, eftersom sessionen gått ut. altså värdet kommer vara WHERE userID=""
Dvs blankt, om jag inte missuppfattat session_OnEnd

Medlem sedan feb. 20032 027 inlägg
#9

M.Cheraghi skrev:

WebbisNet skrev:

Kommer då detta att funka i Session_OnEnd

Dim objConn
Set objConn = Server.CreateObject("ADODB.Connection")
SET objConn = connect()
objConn.Execute("Update tblUsers SET inloggad = False, Chattar=False WHERE userID="&Session("userID")&"")
objConn.Close
Set objConn = nothing

Jag är inte säker, men jag tror inte att det kommer att fungera, din Session("UserID") kommer inte att ha något värde, eftersom sessionen gått ut. altså värdet kommer vara WHERE userID=""
Dvs blankt, om jag inte missuppfattat session_OnEnd

Kommer inte på nåt bra sätt att med sql-satsen logga ut just DEN inaktive användaren

Medlem sedan juli 20015 107 inlägg
#10

Det finns andra lösningar till detta än Global.asa, men om man får till det o fungera tror jag det är den mest effektiva.
Men om jag förstått @nders ska du på något sätt lagra session.sessionID i databasen, i samma tabell som du har kolumnen 'inloggad', och genom den joxxa o trixa och lira lite grann. Men hur, vet jag faktiskt inte :)

313 ms totalt · 4 externa anrop · v20260731065814-full.a51de22e
124 ms — deklarationer (db)
0 ms — hämta statistik (cache)
141 ms — hämta tråd, inlägg och bilagor (db)
168 ms — ändringar (db)