Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:25 Der 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.

På forhånd tak.
Avatar billede busschou Praktikant
26. juli 2005 - 13:28 #1
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

http://www.w3schools.com/asp/asp_globalasa.asp
Avatar billede busschou Praktikant
26. juli 2005 - 13:29 #2
Så du skal med andre ord kunne leve med at de står online i tyve minutter efter de er gået af
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:32 #3
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.
Avatar billede busschou Praktikant
26. juli 2005 - 13:36 #4
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
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:38 #5
Det med Global.asa lyder fint nok.. det med 20 minutter betyder intet..
Kan du give et eksempel på en Global.asa fil med noget ASP inkluderet?
Avatar billede busschou Praktikant
26. juli 2005 - 13:42 #6
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
Avatar billede busschou Praktikant
26. juli 2005 - 13:43 #7
kan godt se at jeg lavede et par kode/stave fejl, men håber du kan se ideen
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:44 #8
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
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:46 #9
<script language="vbscript" runat="server">
sub Session_OnEnd

Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=" & Server.MapPath("../../RaiX.mdb") & ""

    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "Select * from Brugere Where Brugernavn = '" & Session("Brugernavn") & "'"
    rs.Open strSQL, Conn, 1, 3

Dim arrMaaneder

arrMaaneder = Array(,"Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December")

rs.Update
rs("Status") = "Offline"
rs("SenesteDay") = Day(Date)
rs("SenesteMonth") = arrMaaneder(Month(Date))
rs("SenesteYear") = Year(Date)
rs("SenesteHour") = Hour(Time)
rs("SenesteMinute") = Minute(Time)
rs("SenesteSecond") = Second(Time)
rs.Update

Session.Abandon

rs.Close
Set rs = Nothing
Conn.Close
Set Conn = Nothing

end sub
</script>

Det her kan godt lade sig gøre så?
Avatar billede jokkejensen Novice
26. juli 2005 - 13:46 #10
lav en tælller der tæller antal online users, når den sidste forlader siden kunne du jo passende sætte dem alle til Offline :)
Avatar billede busschou Praktikant
26. juli 2005 - 13:47 #11
ja det burde virke, pånær server.mappath, den virker ikke, der skal du angive den absolutte sti :o)
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:47 #12
jokke det hjælper desværre intet da der er omkring 20 online døgnet rundt.. om dagen omkring de 50.. men ellers tak :)
Avatar billede busschou Praktikant
26. juli 2005 - 13:49 #13
jokkejensen >> ideen er jo god nok, hvis alle er væk på et tidspunkt, men hvordan vil du tjekke det når de netop _ikke_ kan registreres ? ;o)
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:49 #14
busschou hvordan skal jeg angive den absolutte sti?
Kan du ikke lige skrive hvordan min DB Conn skal være for at det virker :)
Avatar billede busschou Praktikant
26. juli 2005 - 13:50 #15
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
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:51 #16
^^ DB Connection
Avatar billede busschou Praktikant
26. juli 2005 - 13:52 #17
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"
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 13:52 #18
Ahh.. nu forstår jeg :) tak for hjælpen.. du får også lige lidt Karma :)
Avatar billede busschou Praktikant
26. juli 2005 - 14:02 #19
jamen jeg bukker og takker :o)
Som sagt kan det være lidt tricky at rode med global.asa
Så du må endelig spørge hvis der dukker noget op
Avatar billede jokkejensen Novice
26. juli 2005 - 14:22 #20
ja okay, men så smid i application_onStart at ALLE er offline :), du har ret
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 14:44 #21
/Global.asa
#####################################################################################
<script language="vbscript" runat="server">
sub Session_OnEnd
Set Conn = Server.CreateObject("ADODB.Connection")
Conn.Open "PROVIDER=MSDASQL;DRIVER={Microsoft Access Driver (*.mdb)};DBQ=C:\Inetpub\wwwroot\RaiX.mdb"

    Set rs = Server.CreateObject("ADODB.RecordSet")
    strSQL = "Select * from Brugere Where Brugernavn = '" & Session("Brugernavn") & "'"
    rs.Open strSQL, Conn, 1, 3

Dim arrMaaneder

arrMaaneder = Array(,"Januar","Februar","Marts","April","Maj","Juni","Juli","August","September","Oktober","November","December")

rs.Update
rs("Status") = "Offline"
rs("SenesteDay") = Day(Date)
rs("SenesteMonth") = arrMaaneder(Month(Date))
rs("SenesteYear") = Year(Date)
rs("SenesteHour") = Hour(Time)
rs("SenesteMinute") = Minute(Time)
rs("SenesteSecond") = Second(Time)
rs.Update

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.
Avatar billede busschou Praktikant
26. juli 2005 - 14:52 #22
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

Ellers kig evt her
http://activedeveloper.dk/artikler/default.asp?articleid=301
Der laver han noget med at skrive/læse fra en fil , så kan man måske debugge den vej
For jeg kan ikke se der skulle mangle noget
Avatar billede jannick281090 Nybegynder
26. juli 2005 - 14:59 #23
Ok tak igen igen :)
Ja har lagt den i roden..
Men pludselig lidt tid efter var den sat til Offline, men prøver lige igen om det nu ikke virker :)
Avatar billede jokkejensen Novice
26. juli 2005 - 15:04 #24
I .Net har jeg problemer med at rettighhederne på Session_End, altså databasen kan ikke manipuleres i denne..

Alternativt oprettede jeg et array med alle de ID der skulle sættes til Offline og gjorde det med passende intervaller et andet sted...
Avatar billede busschou Praktikant
26. juli 2005 - 15:06 #25
Ja det er altså noget drilsk noget det der session_onend
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester