08. juli 2005 - 14:08Der er
12 kommentarer og 1 løsning
Problem med "online brugere" script (Global.asa)
Hej hej.
Jeg har fundet et scripte (Her på E) som viser hvilke brugere der er online. Det gør den ved at læse session("username"). problemet er at brugere ikke bliver fjrnet fra listen når de forlader siden..? Her er scriptet (global.asa): <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
' timeout_sek = 2
Sub Application_OnStart ' Nulstiller antallet af brugere når applikationen (serveren) startes
Sub Application_OnEnd ' Skriv kode som skal køres når applikationen (serveren) stoppes End Sub
Sub Session_OnStart ' Forøger antallet af brugere med 1, når en session startes Application.Lock Application("ActiveUsers") = Application("ActiveUsers") + 1 Application.UnLock End Sub
Sub Session_OnEnd ' Reducer antallet af brugere med 1, når en session afsluttes
If Len(Session("username")) > 0 Then Application.Lock Application("OnlineUsers") = Replace(Application("OnlineUsers"), Session("username") & ",", "") Application.UnLock End If
Application.Lock Application("ActiveUsers") = Application("ActiveUsers") - 1 Application.UnLock End Sub </SCRIPT>
er problemet ikke blot det generelle at ens session først slutter som standard 20min efter man har lukket siden, med mindre man koder en session abandon? Session_OnEnd kaldes jo først når sessionen timer ud
Internettets afkoblede natur gør det lidt svært at bestemme hvornår en bruger ikke er på længere (hvis altså man ikke kan vente til session løber ud).
Jeg kunne foreslå at du selv flikkede et koncept sammen, hvor du holdt styr på hvornår en bruger sidst kontaktede serveren for at opdatere data og så selv definerer hvor lang tid der skal gå (f.eks. 5 min), før brugeren betragtes som offline (uden denne dog rent faktisk mister sin session efter 5 min). Der skelnes altså mellem et fysisk session-timeout og et logisk (det koncept jeg skitserer her). Dette indbærer at du skal have en liste, som opdateres hver gang en bruger vender tilbage til serveren. Denne liste kunne f.eks. bestå af et tidspunkt og brugerid. Listen benyttes så til at generere oversigten over hvilke brugere der er aktive (hyppigt nok til at fremgå af listen om ikke andet)...
session.abandon vil man normalt sætte på en side hvor man har en logud funktion. På den måde forsvinder sessionen og der tælles en ned i global.asa Der hvor man ikke kan styre det er når en buger lukker sin browser, for der kan man ikke nå at lave en abandon, og derfor vil der først blive talt en ned efter 20min som standard. Hvis du på nuværende tidspunkt _kun_ har ovenstående kode og ellers ikke piller ved sessions, så vil alle brugere først blive registreret som logget ud tyve min efter de har forladt siden
ja okay. Jeg har fået .abandon sat ind når brugeren logger ud. Men ja, så er problemet når brugeren bare lukker Browseren... Findes der et script der kan håndtere det?? jeg har spekuleret i noget JavaScript, men kan ikke rigtigt se hvordan man lige skulle kunne lave et sådan script. Måske du kender til noget??
Jeg har selv engang ledt efter det, og det eneste jeg gang på gang har set er at det ikke kan lade sig gøre Du kan i javascript køre en function på "onUnload" og specielt i IE "onBeforeUnload" Men jeg har ikke set nogen som har implementeret en brugbar løsning
ja, jeg har det til at virke som det skal, eller skal jeg skrive som det kan :) hehe. jeg har sat min session timeout til 5 min, så hvis folk lukker browseren går der ik så lang tid inden de ikke vises som online.
ja, kanon da. Troede egentlig den var lukket den her. :)
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.