26. juli 2005 - 13:25Der er
24 kommentarer og 1 løsning
Kør ASP Kode ved Lukning af side uden Popup
Hej Eksperter.
Jeg har som så mange andre en hjemmeside, men jeg har et lille problem. Folk glemmer mange gange at logge ud og så står deres bruger til Online på Brugerlisten samt deres Session stadig kører. Så jeg vil gerne have lidt hjælp, hvordan kan jeg gøre så de bliver logget ud når de lukker siden ned? Det må ikke være popup, skal på en eller anden mærkværdig måde havde kørt mit logud script hvor de får opdateret deres status til Offline samt afsluttet sessions.
Du kan kigge lidt på global.asa Den har en metode Session_OnEnd som køres når sessionen dør Sessionen dør som standard efter 20min med mindre du har sat session.timeout, eller hvis man kalder session.abandon Dvs hvis en bruger bare lukker browseren så køres koden tyve minutter efter
Bedre kan det ikke gøres, og endvidere bevidner en masse debatter herinde om at man ikke 100% kan stole på session_onend ... desværre
Ok men der er jo så det andet problem, det er ikke noget problem at deres session kører 20 minutter videre. Problemet er at deres Status i Databasen skal sættes til Offline.
Yes hvis du kigger på global.asa, så bør du kunne opdatere din database i metoden Session_OnEnd Men der går 20min før den metode bliver kaldt Det kan ikke gøres anderledes - desværre
Så skal du udnytte UnbeforeUnload() metoden i javascript til at lave et popup vindue, som så kun virker i IE fordi metoden kun virker i IE, og som også kun virker hvis ens popup spærrer ikke fanger den Så det forstår jeg også godt at du ikke vil
Global.asa ser som standard sådan her ud med de fire metoder den har indbygget ---- <script language="vbscript" runat="server">
sub Application_OnStart ''''some code end sub
sub Application_OnEnd ''''some code end sub
sub Session_OnStart ''''some code end sub
sub Session_OnEnd ''''some code end sub
</script> --- Du skal så ind og arbejde i Session_OnEnd og det foregår fuldstændig som normal vbscript --- sub Session_OnEnd Dim conn Set conn = Create...din database forbindelse Set conn.execute("Update tabel Set online = False Where id = "session("id")) end sub --- Bemærk dog at man ikke kan benytte Server.Mappath i Session_OnEnd Og som sagt kan man kun stole på den 100% bliver kørt hvis session.abandon kaldes Dvs du kan desværre risikere at der er en smutter hist og pist, hvor tit det sker ved jeg ikke
Okay det er den bedste løsning jeg jo som sagt kan få så det går an.. Og med dem som måske smutter hist og pist kan jeg jo altid selv sætte til Offline via min Admin del :) Tak for hjælpen, smid et svar så er der point :D
jannick281090 >> og så skal du ikke kalde session.abandon i Session_OnEnd, metoden køres inden den sletter sessionen helt, så det er sat i værk :o) Det er muligt du oplever lidt bøvl, synes jeg i al fald tit jeg gør
absolutte sti er jo bare stien på server "d:\web\blabla.dk\wwwroot\db\db.mdb" eller hvad den nu er hos dig Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=dinsti\RaiX.mdb"
rs.Close Set rs = Nothing Conn.Close Set Conn = Nothing end sub </script> ##################################################################################### Global.asa/
busschou > det funker ikke :( loggede ind på min bruger, lukkede siden ned og ventede 40 minutter og så kiggede jeg men var stadig Online.
og det dumme ved global.asa er så at den ikke er til at debugge Normalt kunne man jo skrive ud til skærmen, men det kan man ikke her. Har du lagt din global.asa i roden af dit domæne ? for der skal den i al fald ligge for at virke
Ja det er altså noget drilsk noget det der session_onend
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.