Ho il solito global.asa con la sub Session_OnEnd
ora...come faccio a richiamare la Session_OnEnd da una pagina asp?
Ho provato
<% Session_OnEnd %> ma mi da errore![]()
![]()
Ho il solito global.asa con la sub Session_OnEnd
ora...come faccio a richiamare la Session_OnEnd da una pagina asp?
Ho provato
<% Session_OnEnd %> ma mi da errore![]()
![]()
La sub Session_onEnd viene richiamata automaticamente dal server web al momento dell'avvenuta disconnessione o timeout della sessione del client.![]()
Io vorrei richiamarla al momento della chiusura del browser...ho letto, facendo una ricerca sul forum, che si potrebbe usare l'evento unload nel body...ma non so con precisione come fare.
Quando chiudi il browser la sessione viene chiusa!![]()
inoltre l'evento onload (e non unload) del tag body non può realizzare uni'istruzione asp; l'istruzione asp viene processata dal server quando questo elabora la pagina asp, mentre l'evento associato all'instruzione onload in body viene 'lanciato' dal browser lato client quando tutto il contenuto del body è stato caricato sul browser del client, quindi deve essere un'istruzione di un liguaggio client-side (tipo JavaScript), non di un linguaggio server-side, come asp.![]()
4everskiff ti ringrazio della risposta anche se in parte non corretta... prova a leggere quì http://forum.html.it/forum/showthrea...ghlight=unload
ok, l'istruzione è prima di tutto onunload, che è l'alter-ego di onload; inoltre non si può fare
ma dovrai chiamare una pagina asp con Session.Endcodice:onunload="<% Session.End %>"![]()
Il problema è che ho delle complicazioni con una sessione e volevo sapere come richiamare la fine di quest'ultima.
"ma dovrai chiamare una pagina asp con Session.End" potresti essere un po + dettagliato?![]()
ritornando al discorso che onload e onunload funzionano con script lato client, non puoi associare un'istruzione asp a quest'ultime... ovvero... in realtà puoi... ma non ti server nel tuo caso; esempio:"ma dovrai chiamare una pagina asp con Session.End" potresti essere un po + dettagliato?
metti di includere la parte body comune a tutte le pagine di un sito tramite un include, includendo il file body.inc (ti faccio l'esempio tratto da un mio sito)
in body.in avrai:
se sono nella pagina principale, per esempio, voglio che al caricamento del body e quindi di tutte le immaginette richiamate nello script di SlideShow in JS, faccia partire lo script, ma non prima che tutte le immagini siano caricate... se non sono nella home page non fa niente!codice:<% BodyOption = "" If PaginaRichiesta = "home.asp" Then BodyOption = "onload='runSlideShow()'" End If %> <body <% Response.Write(BodyOption) %> topmargin="0" leftmargin="0" scroll="no" style="background-image: url('img/sfondo.png'); background-repeat: no-repeat; background-color: rgb(255,255,255); background-position: 0px 0px">
oppure potrei avere due script diversi e mettere
così funziona perchè assegna il valore di un qualcosa che verrà eseguito sul client tramite un'opzione lato client.... ma se metto, per esempio:codice:script1 = "script1()" script2 = "script2()" If PaginaRichiesta = "home.asp" Then script = script1 Else script = script2 End If <body onload='<% Response.Write(script) %>'>
l'istruzione viene comunque eseguita, cioè non aspetta il completo caricamento sul client del body!codice:<body onload='<% Response.Flush %>'> 'Response.Flush istruzione che serve per svuotare la cache del server anche se la pagina non è stata ancora completamente elaborata dal server... ma forse già sai :fighet:
per questo dicevo di associare a onunload un'istruzione JS come window.navigate("pagina.asp") che rimanda il tutto alla pagina pagina.asp dove puoi mettere le istruzioni asp appropriate.
l'unico dubbio è relativo al fatto che se chiudi la pagina l'istruzione navigate non funziona, ma finchè non provo non sono sicuro! forse è meglio aprire pagina.asp adirittura in una nuova finestra, e poi, una volta eseguito il codice asp farla chiudere da sola con window.close (o qualcosa del genere, adesso non ricordo esattamente....)
se mi spieghi meglio il problema posso aiutarti meglioIl problema è che ho delle complicazioni con una sessione e volevo sapere come richiamare la fine di quest'ultima.![]()
Alla faccia del "puoi essere + dettagliato?"![]()
Allora...vista la tua disponibilità ti descrivo il mio problema:
Ho un login che mi fa accedere ad arree protette nelle quali includo il file verifica.inc.
Il login funziona perfettamente, anche il logout fa il suo dovere.
Il problema è nell'ultimo pezzo del codice della pagina verifica.inc...il codice mi scrive chi è connesso, ma all'uscita non mi cancella il nome dell'utente connesso;
mi spiego meglio: se si connettono UGO e MATTEO il "response.write("Sono connessi: ")&(Application("nomiusers"))" mi stampa a video (giustamente) che sono connessi UGO e MATTEO...ma se uno dei 2 (o tutti e 2) effettua il logout (o chiude il browser) rimane scritto "Sono connessi: UGO e MATTEO".
Il codice del file Verifica.inc è:
codice:<% Dim ConnVerifica Set ConnVerifica=Server.CreateObject("ADODB.Connection") ConnVerifica.Open "driver={Microsoft Access Driver (*.mdb)};pwd=;dbq="& server.MapPath("..\..\db\carico.mdb") 'Se la sessione login è diversa da uno allora esegue la verifica if session("login") <> 1 then 'Richiama i valori inseriti nel form di Login.asp Username = request("Username") Password = request("Password") 'Stringa SQL che seleziona l'username e la password dalla tabella del database SqlVerifica = "select * from Utenti where Username = '" & Username & "' and Password = '" & Password & "'" set recVerifica = ConnVerifica.execute(SqlVerifica) 'Se i dati sono presenti nella tabella, session("login") assume il valore di uno altrimenti viene eseguito il reindirizzamento alla pagina Login.asp if not recVerifica.eof then session("login") = 1 else response.redirect "Login.asp" end if session("login2")=Username recVerifica.close set recVerifica = nothing end if %> ------'L'ERRORE DOVREBBE ESSERE QUI'-------------- <% For i = 0 to Session.Contents.Count Next x=Application("nomiusers") x=x & " " & username Application("nomiusers")=x response.write("Sono connessi: ")&(Application("nomiusers")) %> '-------------------------------------------------------
il problema credo risieda nel fatto che quando chiudono il browser senza disconnettersi lo script di logout non viene avviato e quindi per l'applicazione sono connessi.
ho dato un'occhiata allo script e mi sembra che gestisci lo username tramite session. potresti x esempio aggiungere un campo logged alla tabella utenti, così puoi fare un'interrogazione per sapere gli utenti connessi (logged='Yes'/'No')
tanto quando si logga dovrai accedere al db x verificare account e pwd, e se la verifica ha successo puoi impostare logged='Yes'
il problema dell'uscita senza logout lo puoi risolvere nel global.asa. quando termina la sessione, richiami lo username e modifichi il database con logged='No'![]()