16. februar 2009 - 15:02Der er
7 kommentarer og 1 løsning
Tælle aktive sessions
jeg har en hjemmeside, hvor man skal skrive en simpel lille kode for at komme ind på gæstebogen. Når man logger ind får man så tildelt et login session.
Nu vil jeg så gerne have mulighed for, at man på siden kan se hvor mange aktive login-sessions der er - så man kan se antal personer logget ind.
Jeg har skrevet flg. når man logger ind: <% if request.QueryString("action") = "login" and request.Form("login") = "password" then
Du bør nok lave en kombination af et loginscript (som du har gjort) og så lægge noget kode i global.asa, hvor der kommer system-events for start og slut på session. Det er primært slut du vil være interesseret i, da det jo først er ved login du ønsker at tælle brugeren som online og det er man jo ikke nødvendigvis bare fordi en session starter.
Derfor er min anbefaling følgende:
1. Ved login registreres dette i application, f.eks. i pseudokode i loginscriptet:
if loginOK then application.lock application("logincounter") = application("logincounter") + 1 application.unlock session("login") = true end if
2. Ved manuel logoff registreres dette i application, i pseudokode:
if logoffOK then application.lock application("logincounter") = application("logincounter") - 1 application.unlock session.contents.remove "login" end if
3. i global.asa i session_onend-eventet, igen i pseudokode:
if session("login") = true then application.lock application("logincounter") = application("logincounter") - 1 application.unlock end if
Således burde du være sikret både at folk ikke registreres som online for tidligt og ikke er registreret længere end deres session løber...
Mange tak, det var lige hvad jeg ledte efter! Jeg har havde godt nok arbejdet med det forslag Visual foreslog, men jeg synes metoden virker utrolig unøjagtig, i og med der skabes en session ved hvert besøg.... sådan firkantet set.
Men Softspot, din løsning lader til at passe perfekt til mig. Tager din løsning dog også forbehold for, at den skal tælle ned i antal online, når en session udløber? (Fx, hvis man går væk fra sin computer). Jeg kan ikke lige helt se mig ud af det nemlig...
arh... tror jeg har fattet en smule. Dvs. hvis jeg skriver sådan her i min global.asa, så ved den at der er tale om Session("login") der udløbes. Hmm... men er den ikke lidt selvmodsigende, når session skal være aktiv for at det virker?
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Session_OnEnd(login)
if session("login") = true then application.lock application("logincounter") = application("logincounter") - 1 application.unlock end if end Sub
Det der sker er at når session rammer sin timeout på en time (siden sidste gang denne session blev kontaktet af brugeren), så kaldes Session_OnEnd i global.asa for denne session. Det er HELE session der fjernes fra hukommelsen, så derfor skal der ikke fjernes noget fra session i dette kode (det sker automatisk i og med session helt nedlægges).
En ting du lige skal være opmærksom på er, at Session_OnEnd ikke tager nogen parameter, så din global.asa skal se således ud:
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">
Sub Session_OnEnd() if session("login") = true then application.lock application("logincounter") = application("logincounter") - 1 application.unlock end if end Sub
</SCRIPT>
Den foreslåede kode skulle gerne både tage højde for at tælle onlinebrugere ned, når brugeren selv vælger at logge af og når serveren ikke længere gider vente på at brugeren foretager sig noget og timer session ud.
Når jeg kalder
Session.Contents.Remove "login"
i stedet for
Session.Abandon
så er det for at lave et mere nøjagtigt indgreb i session, da det jo kunne tænkes at du brugte session til andet end lige at holde styr på hvem der er logget ind. I så fald vil Remove-metoden kun påvirke selve login. Du kan naturligvis godt bruge Session.Abandon, hvis du er 100% sikker på at session ikke bruges til andet end login-styring. Remove-metoden adskiller sig desuden fra Abandon-metoden ved at login er fjernet umiddelbart efter den linie som kalder Remove, hvor login-variablen ved Abandon-metoden eksisterer indtil siden (request) er helt afsluttet. Det betyder i praksis at du med Abandon-metoden kan få adgang til login-variablen efter session.abandon er kaldt... om du så foretrækker den ene frem for den anden er op til dig :)
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.