|
| Global.asa og Session_OnEnd Fra : Dan Frederiksen [DJ ~ |
Dato : 27-05-01 17:55 |
|
Hey Folkens,
Jeg sidder med et HUGE PROBLEMO. Jeg er ved at lave et system, så man kan se
hvilke brugere der er online. Ikke hvor mange, men hvilke brugere der er
logget ind. Jeg var smart! Jeg satte en
Application("OnlineList") = ,
ved application_OnStart.
Og i login-formularen puttede jeg brugerens Id og et komme (Ex. 43,) oveni
Application("OnlineList") og satte samtigigt Session("bruger") = Brugerens
Id i databasen.
Når brugeren logger af nulstilles session, og for at fjerne brugeren igen
fra listen, indsætter man selvfølgelig en Replace kommando og replacer
brugerens id (Session("bruger")) og et komma (Ex. 45,) i
Application("OnlineList") - erstattes med ingenting.
Men det viser sig at koden i Session_OnEnd først udføres EFTER session'en er
lukket . Dvs. Session("bruger") er tom, og kun et komma står tilbage. Derfor
vil alle kommaer i listen fjernes.
Nogen der har nogle guldkorn til hvordan jeg løser mit problem?!
Dan Frederiksen
| |
Lauritz Jensen (27-05-2001)
| Kommentar Fra : Lauritz Jensen |
Dato : 27-05-01 18:39 |
|
"Dan Frederiksen [DJ Dencker]" wrote:
>
> Jeg sidder med et HUGE PROBLEMO. Jeg er ved at lave et system, så
> man kan se hvilke brugere der er online. Ikke hvor mange, men
> hvilke brugere der er logget ind.
Min erfaring siger at session_onend er ganske upålidelig. De gange hvor
jeg har lavet sådan et system, har jeg haft en application variabel hvor
bruger-id'er har ligget sammen med et timestamp, eks:
">id1<tid1>id2<tid2"
Hver gang en bruger henter en side (eller første gang efter, der er gået
5 minutter efter sidste gang hun hentede en side), laver man en søgning
efter ">id<" fjerner det gamle entry og indsætter ">id<nytid" tilsidst.
En gang i kvarteret fjerner man så alle de elementer, der er blevet
ældre end 10 minutter (de står forest).
Det scallerer jo ikke til mere end ... hmm ... 100 brugerer. Nu om dage
ville jeg nok lave noget sjov med en prioritetskø. Hvis du har flere
brugerer, bliver du nok nød til at lægge det i databasen (det er heller
ikke noget problem, hvis du bruger access, men det kan jo komme til at
fylde i transaction loggen, hvis du bruger Sql Server)
--
Lauritz
| |
|
|