Avatar billede hjemmeskoen Nybegynder
13. november 2005 - 21:38 Der er 23 kommentarer og
1 løsning

Den logger ikke af..

Hejsa..
Jeg har en Global.asa der ser således ud:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
  Sub Application_OnStart
    Application("db") = "Data Source="&Server.Mappath("db/database.mdb")&_
            ";Provider=Microsoft.Jet.OLEDB.4.0;"
  End Sub

  Sub Session_OnStart

  // Her er dit eget
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/db/Hits.mdb")
    set antal = conn.execute("select count(*) from Taeller where ip = '"&request.servervariables("REMOTE_ADDR")&"' and dato = #"&date()&"#")
    if antal(0) = 0 then
      conn.execute("Insert into Taeller (ip,dato) values ('"&request.servervariables("REMOTE_ADDR")&"',#"&date()&"#)")
    end if
  // Her slutter dit eget

  End Sub

  Sub Session_OnEnd
    Dim Conn
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open Application("db")
    // Du skal lige rette tabel navn osv
    Conn.Execute("Update Brugere Set Online = 'Nej' Where Brugernavn = '" & Session("Brugernavn") & "'")
    Conn.Close
    Set Conn = Nothing
  End Sub
</SCRIPT>


I følge hvad jeg kan forstå af koden skulle Online blive til Nej ved brugeren når man trykker på krydset. - Men det gør den ikke..

Hvad kan jeg gøre for at den logger af korrekt?
Avatar billede softspot Forsker
13. november 2005 - 21:58 #1
Session ophører ikke bare fordi brugeren lukker browseren. Session har en levetid på et eller andet tidsrum (typisk 20 min). Dette er du nød til at vente på (eller lave nogle, typisk resursedyre, løsninger der holder mere øje med hvor aktiv brugeren er på dit site. Jeg er dog overbevist om at du vil opleve at online bliver sat til Nej efter det omtalte tidsrum er gået siden brugerens sidste aktivitet på serveren...
Avatar billede hjemmeskoen Nybegynder
14. november 2005 - 08:02 #2
Det gør det ikke.
Jeg har sat en session.Timeout på 2 minutter og har også prøvet med serverens normale session.Timeout (20 Min.) hvilket ikke fungerer.

Og Nej jeg tror ikke det har noget med min tålmodighed at gøre eftersom jeg har prøvet at lade den stå et døgn - Den vil bare ikke logge af.

En Global.asa virker den også hvis man bare skriver et nyt link i adresselinien og går til det? - Altså hverken trykker på krydset eller på log af..
Avatar billede softspot Forsker
14. november 2005 - 10:49 #3
Ja, det er jeg ret overbevist om, for en session ligger på serveren og bliver vedligehold/genopfrisket når den påg. bruger laver et request til sitet. Hvis der ikke har været et request indenfor timeoutperioden, så bliver session nedlagt igen...
Avatar billede softspot Forsker
14. november 2005 - 10:53 #4
Du kan evt. prøve at skrive til en logfil når den kode bliver udført. Jeg kunne mistænke Session("Brugernavn") for ikke at indeholde den værdi du forventer.

Jeg vil tro dette kode i session_onend kan klare denne logging-opgave:

set fso = server.createobject("Scripting.FileSystemObject")
set f = fso.opentextfile(server.mappath("session.log"))
f.write "Bruger logger af: " & session("Brugernavn") & vbCrLf
f.close
set fso = nothing
Avatar billede hjemmeskoen Nybegynder
15. november 2005 - 16:54 #5
Vil du være sød at vise hvor den kode du postede skal smides ind?
Og er det så menningen man eksempel skriver Log.TXT også skriver den til den fil eller hva'?
Avatar billede softspot Forsker
15. november 2005 - 17:24 #6
Formålet med det kode jeg postede var egentlig bare at debugge, om koden blev udført og hvornår (jeg har lige modificeret lidt i min egen og din kode...):

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
  Sub Application_OnStart
    Application("db") = "Data Source="&Server.Mappath("db/database.mdb")&_
            ";Provider=Microsoft.Jet.OLEDB.4.0;"
  End Sub

  Sub Session_OnStart
    ' Her er dit eget
    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/db/Hits.mdb")
    set antal = conn.execute("select count(*) from Taeller where ip = '"&request.servervariables("REMOTE_ADDR")&"' and dato = #"&date()&"#")
    if antal(0) = 0 then
      conn.execute("Insert into Taeller (ip,dato) values ('"&request.servervariables("REMOTE_ADDR")&"',#"&date()&"#)")
    end if
    ' Her slutter dit eget
  End Sub

  Sub Session_OnEnd
    dim fso, f, conn

    set fso = server.createobject("Scripting.FileSystemObject")
    set f = fso.opentextfile(server.mappath("session.log"),8,true)
    f.write "["& now &"] " & Session("Brugernavn") & " logger af." & vbCrLf
    f.close
    set fso = nothing

    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open Application("db")
    // Du skal lige rette tabel navn osv
    Conn.Execute("Update Brugere Set Online = 'Nej' Where Brugernavn = '" & Session("Brugernavn") & "'")
    Conn.Close
    Set Conn = Nothing
  End Sub
</SCRIPT>
Avatar billede hjemmeskoen Nybegynder
15. november 2005 - 17:36 #7
Jo men hvordan kan jeg udskrive det?
Avatar billede softspot Forsker
15. november 2005 - 17:42 #8
i din browser kan du i princippet bare skrive

http://localhost/session.log

så burde den vise logfilen (localhost kan naturligvis udskiftes med dit domænenavn).
Avatar billede hjemmeskoen Nybegynder
15. november 2005 - 21:56 #9
Den sir' bare den ikke kan finde siden.
Er det ikke muligt den kan skrive det til en TXT fil?

Og hvornår er det præcist den skal skrive det der? Er det når brugeren trykker på krydset eller når sessionen løber ud?
Avatar billede softspot Forsker
15. november 2005 - 22:00 #10
Når session løber ud. Grunden til at jeg gerne vil have det i en fil, er at der måske kunne være et problem med opdateringen i databasen. Derfor ville jeg gerne se om koden overhovedet blev udført og med hvilken værdi...
Avatar billede softspot Forsker
15. november 2005 - 22:01 #11
...og du kan godt kalde filen for txt i stedet.
Avatar billede hjemmeskoen Nybegynder
17. november 2005 - 09:35 #12
Den skriver ikke noget til filen.. -> Hvad kan der være galt?
Avatar billede softspot Forsker
17. november 2005 - 09:46 #13
Prøv lige at benytte denne kode og fortæl mig om den skriver at brugeren (dvs. dennes IP-adresse) er logget på:

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
  Sub Application_OnStart
    Application("db") = "Data Source="&Server.Mappath("db/database.mdb")&_
            ";Provider=Microsoft.Jet.OLEDB.4.0;"
  End Sub

  Sub Session_OnStart
    ' Her er dit eget
    Session("REMOTE_ADDR") = request.servervariables("REMOTE_ADDR")
    dim fso, f, conn

    set fso = server.createobject("Scripting.FileSystemObject")
    set f = fso.opentextfile(server.mappath("session.log"),8,true)
    f.write "["& now &"] " & Session("REMOTE_ADDR") & " logger på." & vbCrLf
    f.close
    set fso = nothing

    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath ("/db/Hits.mdb")
    set antal = conn.execute("select count(*) from Taeller where ip = '"&request.servervariables("REMOTE_ADDR")&"' and dato = #"&date()&"#")
    if antal(0) = 0 then
      conn.execute("Insert into Taeller (ip,dato) values ('"&request.servervariables("REMOTE_ADDR")&"',#"&date()&"#)")
    end if
    ' Her slutter dit eget
  End Sub

  Sub Session_OnEnd
    dim fso, f, conn

    set fso = server.createobject("Scripting.FileSystemObject")
    set f = fso.opentextfile(server.mappath("session.log"),8,true)
    f.write "["& now &"] " & session("REMOTE_ADDR") & " => " & Session("Brugernavn") & " logger af." & vbCrLf
    f.close
    set fso = nothing

    Set Conn = Server.CreateObject("ADODB.Connection")
    Conn.Open Application("db")
    // Du skal lige rette tabel navn osv
    Conn.Execute("Update Brugere Set Online = 'Nej' Where Brugernavn = '" & Session("Brugernavn") & "'")
    Conn.Close
    Set Conn = Nothing
  End Sub
</SCRIPT>
Avatar billede softspot Forsker
17. november 2005 - 09:48 #14
...og du skal naturligvis lige have ændret filnavnet til session.txt i de to session-events :)
Avatar billede hjemmeskoen Nybegynder
17. november 2005 - 09:49 #15
Kan jeg godt ændre

    set fso = server.createobject("Scripting.FileSystemObject")
    set f = fso.opentextfile(server.mappath("session.log"),8,true)
    f.write "["& now &"] " & Session("REMOTE_ADDR") & " logger på." & vbCrLf
    f.close
    set fso = nothing


Til:


    set fso = server.createobject("Scripting.FileSystemObject")
    set f = fso.opentextfile(server.mappath("Log.txt"),8,true)
    f.write "["& now &"] " & Session("REMOTE_ADDR") & " logger på." & vbCrLf
    f.close
    set fso = nothing


Og det samme med:


    set fso = server.createobject("Scripting.FileSystemObject")
    set f = fso.opentextfile(server.mappath("session.log"),8,true)
    f.write "["& now &"] " & session("REMOTE_ADDR") & " => " & Session("Brugernavn") & " logger af." & vbCrLf
    f.close
    set fso = nothing
Avatar billede softspot Forsker
17. november 2005 - 09:56 #16
Ja, det skulle jeg mene (jeg antager du kun har rettet filnavnet).
Avatar billede hjemmeskoen Nybegynder
17. november 2005 - 15:16 #17
Den skriver ikke en dyt..
Og min global.asa virker slet ikke..

Hvad skal jeg gøre?
Avatar billede softspot Forsker
17. november 2005 - 15:24 #18
Hvor ligger den global.asa i din katalogstruktur? Den _skal_ ligge i roden af dit website (eller virtual folder hvis du har dit site liggende i sådan en).
Avatar billede hjemmeskoen Nybegynder
17. november 2005 - 15:55 #19
Katalogstruktur?
Og JA den ligger i roden af domænet..
Avatar billede hjemmeskoen Nybegynder
20. november 2005 - 11:06 #20
Hvaa?
Avatar billede softspot Forsker
20. november 2005 - 18:33 #21
Hvis den ikke vil fungere når den ligger det rigtige sted, så har jeg ikke lige nogle idéer, desværre...

Det eneste jeg kunne forestille mig at gøre var at skære funktionaliteten i global.asa helt ind til benet og kun lige lave en helt simpel tildeling af en variabel (f.eks. application("test") = application("test") + 1 i session_onend). Dit første problem er velsagtens at få aktiveret global.asa...
Avatar billede hjemmeskoen Nybegynder
21. november 2005 - 08:12 #22
Det er bare lidt underligt når det med at den ligger i databasen virker og det andet har jo også virket før..
Avatar billede softspot Forsker
21. november 2005 - 14:35 #23
Så må du stille det tilbage til det der fungerede i sin tid og forsøge at arbejde dig frem derfra. Jeg kan ikke umiddelbart se hvad det er der går galt, men det kan være en af eksperterne herinde kan...

Det kan være du kan få noget ud af at læse busschou's artikel om global.asa (og nej, jeg kan ikke huske linket, så du må se om du kan finde den via søgning :)).
Avatar billede hjemmeskoen Nybegynder
18. februar 2006 - 18:08 #24
..
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