Avatar billede kev. Nybegynder
23. juni 2005 - 11:12 Der er 7 kommentarer og
1 løsning

Problemer med Session_OnEnd i Global.asa

Hejsa,

Jeg forsøger at lave en log, så jeg har se, hvornår en bruger i et internt system er logget af.

Der er jo reelt 3 muligheder:
1) Brugeren klikker på logaf (og bliver logget af; handlingen gemmes i databasen)
2) Brugeren lukker vinduet eller forlader siden (klarer jeg med en popup via onUnload; handlingen gemmes i databasen)
3) Sessionens uddør - og her har vi så problemet

Alle ovenstående (da alm. logaf foregår via Session.Abandon) burde jo blive fulgt op af Session_OnEnd i global.asa, men der er jo forskellige begrænsninger i denne fil.

Har fundet ud af, at man ikke kan bruge Server.MapPath, at man ikke kan bruge Access-databaser og at den gamle IIS4 var ret ustabil mht. Session_OnEnd.

Jeg troede derfor, jeg var smart, at jeg i stedet blot anvendte en tekstfil til loggen og lavede følgende globalasa:

----------
<SCRIPT LANGUAGE="VBScript" RUNAT="Server">


Sub Application_OnStart


    strFil = "e:\intern\filer\log.txt"

    Set objFile = Server.CreateObject("Scripting.FileSystemObject")


    If objFile.FileExists(strFil) Then
        Set fsUdtraek = objFile.OpenTextFile(strFil, 8)
    Else
        Set fsUdtraek = objFile.CreateTextFile(strFil)
    End If


    strTekst = Now() & " -- Application started"

    fsUdtraek.WriteLine strTekst

End Sub


Sub Application_OnEnd

    strFil = "e:\intern\filer\log.txt"

    Set objFile = Server.CreateObject("Scripting.FileSystemObject")


    If objFile.FileExists(strFil) Then
        Set fsUdtraek = objFile.OpenTextFile(strFil, 8)
    Else
        Set fsUdtraek = objFile.CreateTextFile(strFil)
    End If


    strTekst = Now() & " -- Application stopped"

    fsUdtraek.WriteLine strTekst

End Sub


Sub Session_OnStart

    strFil = "e:\intern\filer\log.txt"

    Set objFile = Server.CreateObject("Scripting.FileSystemObject")


    If objFile.FileExists(strFil) Then
        Set fsUdtraek = objFile.OpenTextFile(strFil, 8)
    Else
        Set fsUdtraek = objFile.CreateTextFile(strFil)
    End If


    strTekst = Now() & " -- Session started: " & Session.SessionID

    fsUdtraek.WriteLine strTekst

End Sub


Sub Session_OnEnd

    strFil = "e:\intern\filer\log.txt"

    Set objFile = Server.CreateObject("Scripting.FileSystemObject")


    If objFile.FileExists(strFil) Then
        Set fsUdtraek = objFile.OpenTextFile(strFil, 8)
    Else
        Set fsUdtraek = objFile.CreateTextFile(strFil)
    End If


    strTekst = Now() & " -- Session ended: " & Session.SessionID

    fsUdtraek.WriteLine strTekst

End Sub


</SCRIPT>
----------

Desværre bliver Session_OnEnd aldrig kørt (selvom alle Session_OnStart virker fint). Nogen, der kan forklare hvorfor??

// Kevin
Avatar billede kev. Nybegynder
23. juni 2005 - 11:54 #1
Kan så konstatere, at Application_OnEnd heller ikke køres, selvom Application_OnStart køres korrekt.

// Kevin
Avatar billede softspot Forsker
23. juni 2005 - 23:55 #2
Jeg spekulerer på om det kan være fordi du ikke få lukket filen efter skrivning... men det er bare en umiddelbar indskydelse. Jeg kan ikke helt gennemskue om det rent faktisk kan være årsagen.
Avatar billede busschou Praktikant
24. juni 2005 - 15:04 #3
bare en tanke
Med mindre du opdaterer dine sessions løbende, så vil alle dem du ikke har fanget være logget af 20min (eller hvor lang tid dine sessions lever) efter de er registreret som logget ind :o)

Så når du hiver din log fra databasen er det jo blot at sætte alle dem som ikke har logget af til at være logget af 20min efter de er logget ind

Mine egne erfaringer er også at session_onend ikke er super nice, dog undrer det mig at du ikke kan bruge access database, for det kan jeg godt, men mappath kan ikke nej
Avatar billede kev. Nybegynder
26. juni 2005 - 10:55 #4
Hej softspot,

Jeg havde ikke engang bemærket med det at få lukket filen, men det er prøvet nu, og har desværre ikke gjort nogen forskel.

--

Hej busschou,

Årsagen er, at jeg vil vide præcist hvornår en bruger af logget af, ellers var hele mit arbejde med log-filen jo ret overflødigt grundet de 20 minutter.

Thjaa, har bare ikke kunne få access til at spille med global.asa, og efter hvad jeg kan læse her på eksperten.dk, så har mange andre også dette problem.

--
Avatar billede kev. Nybegynder
27. juni 2005 - 12:14 #5
Nå, har lige smidt det hele på den Windows 2000 Server, som det skal gøre fra (jeg bruger Win XP Pro til udvikling/test-server)... og på Win 2000 serveren virker alt helt perfekt uden problemer.

Både Session_OnEnd og Application_OnEnd fungerer fint!

// Kevin
Avatar billede busschou Praktikant
27. juni 2005 - 12:21 #6
ok så er vi da blevet så kloge som at global.asa skal testes "live" og "rigtigt" fra serveren, og ikke simuleret på ens egen maskine
Avatar billede kev. Nybegynder
27. juni 2005 - 17:56 #7
Thjaaa, ved ikke helt hvorfor der er forskel på Win 2000 Server og Win XP Pro på det område, da XP jo må formodes at have en nyere udgave af IIS.
Avatar billede kev. Nybegynder
15. juni 2006 - 10:57 #8
Lukker...
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