• User Attivo

    global.asa e session_onEnd

    Salve a tutti, avrei l'esigenza di cancellare alcuni campi in un database access quando un'utente effettua il log-out, allora avevo pensato di mettere queste righe nel global.asa, ma non mi funziona.

    global.asa

    Sub Session_OnEnd
      //serve per cancellare i dati nella tabella contatti
      set connessione = server.createobject("ADODB.Connection")
      connessione.open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "& server.MapPath("/mdb-database/contatti.mdb"))
      connessione.execute("UPDATE istituti, Persone SET istituti.mandaMail='', Persone.mandaMail=''")
      connessione.close
      set connessione = nothing
    
    End Sub
    ```come posso fare???
    
    Grazie, ciao.

  • Super User

    Ciao DarioMarco e Benvenuto nel Forum GT!

    Cosa di preciso non va? Non fa niente? Il codice dentro session_ionend viene eseguito? Perchè cercando un pò in rete ho trovato questo: http://blogs.aspitalia.com/cp/post2025/Windows-2003-SP2-ASP-Session_OnEnd.aspx

    Potrebbe essere questo il tuo problema. In ogni caso, prima prova a fare un pò di debug, ad esempio fai scrivere qualcosa dentro quella funzione per vedere se la esegue, o analogo, per capire se effettivamente la esegue. Inoltre, visto che parli di logout, non potresti fare eseguire questo codice quando l'utente clicca il pulsante per il logout?


  • User Attivo

    Grazie, Cali per la tua accoglienza e per la tua risposta,
    Lo script non fa proprio niente, dal tronde, l'ho provato su una pagina asp normale e richiamandola, ho notato che lo script funziona.

    Molto probabilmente il problema potrebbe essere legato al link che mi hai postato te, infatti, assieme a questo script, nella sub onEnd, ho associato anche il banale contatore utenti connessi, e a volte mi da risultati sballati. Leggevo appunto tra i commenti uno che aveva il mio stesso problema.

    Per quanto riguarda il mio problema, io dovrei cancellare alcuni campi di un db quando l'utente loggato su cui ci sta lavorando, abbandona quel tipo di lavoro, ma non so dove potrei aggrapparmi.
    Sulla stessa pagina, non posso, perchè se l'utente per un'attimo cambia pagina e ci ritorna, si ritrova tutto azzerato.

    Un link "logout" non è male come idea, ma se l'utente dimentica di "sLoggarsi"???

    e se mettessi questo script nella session on_Start???

    Grazie, ciao.


  • Super User

    Se si dimentica di sloggarsi, molto probabile, il problema rimane. L'on start come potrebbe funzionare, non devi cancellare quelle cose quando lui se ne va dal sito?


  • User Attivo

    si, ma è anche vero che se l'utente se ne va, prima o poi qualcuno per iniziare a lavorare deve entrare, allora troverà tutto resettato. Forse il mio ragionamento è troppo logico, ma poco pratico:?
    e se usassi application on_end, il database si aggiornerebbe ogni volta che qualsiasi utente lascia l'area di accesso???

    grazie, ciao.


  • Super User

    Ah ma quindi all'applicativo lavora un utente per volta? In quel caso l'on start potrebbe andare...


  • User Attivo

    stranamente mi funziona anche quando la sessione va in timeout, sembra strano.
    cmq io ho messo lo script sotto session on start, ma quello che mi chiedo, se mentre lavora un utente, si connette un'altro utente (inizia a loggarsi), il database, verrà aggiornato???

    Grazie, ciao.


  • Super User

    Ciao DarioMarco, credo che si, verrà aggiornato. E' quello che volevi?


  • User Attivo

    mmm, no, pensavo fosse una variabile legata al comportamento di una persona, a questo punto, penso che dovrei costruire un "qualcosa" che permette di far lavorare solo un'utente per volta nel db.

    Esiste qualche procedura speciale (tipo se la connessione col db è aperta non permettere l'accesso alla pagina)???

    In alternativa io avrei pensato di creare una variabile di sessione, se l'utente apre quella pagina la impostiamo a fale, quando abbiamo il session timeout, la variabile diventa true. allora se la variabile e false, nonsi puo acecdere a quella pagina, mentre se true, si.

    che mi consigli???


  • Super User

    Non saprei di preciso, dovresti spiegare per bene cosa intendi fare. In pratica tu vuoi che lavori solo un utente nel database? Se è così, il timeout della session potrebbe andare bene.


  • User Attivo

    thnx, proverò in questo modo, sfrutterò il session.timeout


  • Moderatore

    Ciao,
    attenzione, te scrivi stranamente funziona quando la sessiona va in timeout

    non è strano per niente perchè quel pezzo di codice che hai scritto

    
    Sub Session_OnEnd
      //serve per cancellare i dati nella tabella contatti
      set connessione = server.createobject("ADODB.Connection")
      connessione.open("Provider = Microsoft.Jet.OLEDB.4.0; Data Source = "& server.MapPath("/mdb-database/contatti.mdb"))
      connessione.execute("UPDATE istituti, Persone SET istituti.mandaMail='', Persone.mandaMail=''")
      connessione.close
      set connessione = nothing
    
    End Sub
    
    ```Funziona **solamente** quando la session va in timeout
    Ovvio che ce la puoi mandare anche te a mano con session.Abandon , non la mandi in timeout a dire il vero, così la "pulisci", comunque il discorso non cambia.
    
    Te non puoi sapere quando l'utente esce dal sito se prima non ha cliccato su un tasto logout.
    
    Quindi la sub si attiva nel momento che la session è andata in timeout, il tempo lo decidi te....
    
    

    mmm, no, pensavo fosse una variabile legata al comportamento di una persona, a questo punto, penso che dovrei costruire un "qualcosa" che permette di far lavorare solo un'utente per volta nel db.

    Esiste qualche procedura speciale (tipo se la connessione col db è aperta non permettere l'accesso alla pagina)???

    In alternativa io avrei pensato di creare una variabile di sessione, se l'utente apre quella pagina la impostiamo a fale, quando abbiamo il session timeout, la variabile diventa true. allora se la variabile e false, nonsi puo acecdere a quella pagina, mentre se true, si.

    che mi consigli???

    ecco questo è più difficile, perchè a meno che non forzi l'utente a sloggarsi con il lgout te in tempo reale non potrai mai sapere se c'è qualcuno connesso, mi spiego meglio prendiamo in considerazione una variabile application("utenti")
    
    questa vale per tutto il sito e lapuoi utilizzare per per contare ad esempio 
    quanti utenti ci sono, però a meno che l'utente non clicca sul logout la variabile verrà scalata nel momento in cui termina la session e quindi nelo momento che verrà richiamata la sub on_sessionstart
    
    Spero di essere stato chiaro, facci sapere
    
    :ciauz:

  • User Attivo

    grazie legolas per il tuo chiarimento,
    io penso che devo costruirmi uno script che limita l'accesso al db ad un solo utente per volta, in quanto se ne sono collegati due contemporanemante e uno si scollega prima il db mi va ad essere aggiornato.
    Anche se come hai detto te è più difficile, penso che al limite, se non forzo l'utente a scollegarsi, l'utente successivo dovrà aspettare al massimo 20 minuti.
    Se avresti qualcosa da consigliarmi mi farebbe molto piacere.

    Grazie, ciao.