Avatar billede mekaniker Nybegynder
04. september 2002 - 00:11 Der er 11 kommentarer og
1 løsning

Global.asa

Sådan ser min global.asa ud
de to variabler jeg erklære under "Sub Session_OnStart" kan jeg sagten skrive ud fra en af mine asp sider.

men koden i "Sub Session_OnEnd" eksekveres ikke, jeg får ingen fejlm. og databasen bliver ikke opdateret med logout-tiden.

Er jeg helt forkert på den, hvis jeg siger at koden gerne skulle eksekveres når jeg lukke vinduet.
(dette skulle gerne virke så at man får skrevet logout-tiden ind i db'en selv om man kommer til at lukke vinduet og glemmer at trykke på logout.

Er der nogle der kan hjælpe en forvirret...??


<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
    ' Skriv kode som skal køres når applikationen (serveren) starter
End Sub

Sub Application_OnEnd
    ' Skriv kode som skal køres når applikationen (serveren) stoppes
End Sub

Sub Session_OnStart
    application("ses_id") = session.SessionID
    application("ip") = request.servervariables("REMOTE_ADDR")
End Sub

Sub Session_OnEnd
  Set myConn = Server.CreateObject("ADODB.Connection")
myConn.open "provider=microsoft.jet.oledb.4.0;data source=" & server.mappath("db/Fiskeri.mdb")&";"

            dato = Year(Date) & "-" & month(Date) & "-" & Day(Date) & " " & FormatDateTime(Time, 3)
           
            SQLstmt = "Update log set "
            SQLstmt = SQLstmt1 & "logout= #" & dato &"#"
            SQLstmt = SQLstmt1 & "Where ip='" & cstr(application("ip")) & "' AND ses_id='"& cstr(application("ses_id")) & "' AND logout IS NULL"
              myConn.Execute(SQLstmt)
                       
myConn.Close
Set myConn = nothing
Set SQLstmt = nothing
End Sub
</SCRIPT>
Avatar billede kichian Nybegynder
04. september 2002 - 09:22 #1
Session_OnEnd bliver først udført når sessionen udløber på serveren. Hvilket vil sige efter typisk 20 minutters inaktivitet.
Avatar billede eagleeye Praktikant
04. september 2002 - 09:27 #2
Server.MapPath virker ikke i Session_OnEnd functionen.

Så i stedet for dette:
data source=" & server.mappath("db/Fiskeri.mdb")&";"

skal man skrive den fysike sti d:\wwwroot\db\

Så i stedet for dette:
data source=d:\wwwroot\db\db/Fiskeri.mdb;"


Men hvis du kigger/søger på Session_OnEnd her på eksperten vil du finde ud af den function måske kun bliver kaldt 50-90% af gangene.

Ligeledes er der også problemmer med at bruge Access, da den er fil baseret i stedet for mySQL/SQL server.
Avatar billede mekaniker Nybegynder
04. september 2002 - 11:47 #3
Hvorfor kan man ikke regne med den..?

Kan det virkelig passe at den kun bliver kaldt 50-90% af gangene.

Har i ikke et bedre forslag til hvad jeg så kan gøre, jeg skal jo gerne have opdateret den tabel, hvis der en som bare lukker vinduet istedet for at logge rigtigt ud.

//Mekaniker
Avatar billede eagleeye Praktikant
04. september 2002 - 12:05 #4
Med IIS4 bliver den ikke altid kaldt men IIS5 er det næste altid den bliver kaldt.
Avatar billede eagleeye Praktikant
04. september 2002 - 12:07 #5
Det mulig det virke vil altid..

men Server.MapPath virker ikke i Session_OnEnd det passer..
Problemmet er at det som kichian er svært at teste da Session_OnEnd først bliver kaldt når Session Timer ud.
Avatar billede mekaniker Nybegynder
04. september 2002 - 12:11 #6
Nu er det på min egen server, så jeg kan vel bare sætte sessiontimeouten ned til 2 min.

//Mekaniker
Avatar billede eagleeye Praktikant
04. september 2002 - 12:17 #7
Du kan altid sætte TimeOutet ned med Session.TimeOut
Om det er 2 eller 20 minutter ændre ikke på der er problem med Session_OnEnd men ellers skal man vendte 20 minutter før der sker noget.

Session.TimeOut = 2 'Jeg mener det er i minutter
Avatar billede eagleeye Praktikant
04. september 2002 - 12:19 #8
Prøv evt at læse dette spørgsmål igennem: http://www.eksperten.dk/spm/226952
Avatar billede mekaniker Nybegynder
05. september 2002 - 12:47 #9
Nu ser min global.asa sådan ud.

<SCRIPT LANGUAGE=VBScript RUNAT=Server>
Sub Application_OnStart
    ' Skriv kode som skal køres når applikationen (serveren) starter
End Sub

Sub Application_OnEnd
    ' Skriv kode som skal køres når applikationen (serveren) stoppes
End Sub

Sub Session_OnStart
    session.timeout = 1
    ses_id = session.SessionID
    ip = request.servervariables("REMOTE_ADDR")
End Sub

Sub Session_OnEnd
              SQLserveradr="localhost"
            SQLdatabase="log"   
            SQLlogin=""
            SQLpassword=""
           
            Set Conn = Server.CreateObject("ADODB.Connection")
              Conn.Open "driver={MySql};server="& SQLserveradr &";database="& SQLdatabase &";uid="& SQLlogin &";pwd="& SQLpassword
   
            dato = Year(Date) & "-" & month(Date) & "-" & Day(Date) & " " & FormatDateTime(Time, 3)
                       
            SQLstmt = "Update log set "
            SQLstmt = SQLstmt & "logout= '" & dato &"'"
            SQLstmt = SQLstmt & "Where ip='" & ip & "' AND session_id='"& ses_id & "' AND logout IS NULL"
              Conn.Execute(SQLstmt)
End Sub
</SCRIPT>

Som du kan se har jeg nu lagt det over i mysql, men jeg synes stadig ikke koden bliver eksekveret. kan du umidlbart se nogle fejl...?
Avatar billede eagleeye Praktikant
06. september 2002 - 23:26 #10
Du er nød til at gemme variable i Session eller cookies. Eller så "glemmer" glabal.asa indholder af variablene i Session_OnStart:


Sub Session_OnStart
    session.timeout = 1
    Session("ses_id") = session.SessionID
    Session("ip") = request.servervariables("REMOTE_ADDR")
End Sub
Avatar billede eagleeye Praktikant
06. september 2002 - 23:27 #11
Og så SQL'en i Session_OnEnd:


SQLstmt = "Update log set "
            SQLstmt = SQLstmt & "logout= '" & dato &"'"
            SQLstmt = SQLstmt & "Where ip='" & Session("ip") & "' AND session_id='"& Session("ses_id") & "' AND logout IS NULL"
              Conn.Execute(SQLstmt)
Avatar billede mekaniker Nybegynder
10. november 2002 - 01:42 #12
Tak for hjælpen, det er lang tid siden jeg har kikket på det, men er igan med en anden ting nu.
Det kan være jeg vender tilbage senere
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