13. november 2005 - 21:38Der 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..
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...
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..
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...
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
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'?
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>
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...
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>
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).
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...
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 :)).
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.