Visualizzazione dei risultati da 1 a 8 su 8
  1. #1

    Intercettare chiusura tab o browser

    Buongiorno.
    Ho letto sia qui che in altri forum, l'evento "onbeforeunload" che dovrebbe intercettare la chiusura del browser o della tab.
    Questo semplice script lo fa:
    codice:
    window.addEventListener('beforeunload', function (e) {
                e.preventDefault();
                e.returnValue = "";
            });
    ma a condizione che si interagisca con la pagina.
    Io non voglio interagire con la pagina, a me serve intercettare la chiusura, per scatenare un evento che mi richiami una pagina php, dove attraverso mysql nella tb_accessi registrerò il logout.

    Al momento non ho trovato nulla.
    Potete aiutarmi per favore?
    Grazie a tutti.

  2. #2
    questo è quello che fa al caso mio.
    codice:
    $(window).on("beforeunload", function () {
    						$.ajax({
    							 type: 'POST',
    							 url: '../logout.php',
    							 success: function () {}
    						});
    					});
    Ma deve funzionare soltanto come dicevo.
    Mi sono accorto che, se aggiorno la pagina, se clicco su un link, vado su una pagina e poi torno indietro, questa funzione viene sempre richiamata, ed è proprio quello che non voglio.
    Come posso ovviare?
    Grazie.

  3. #3
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,708
    Quote Originariamente inviata da ANTAGONIA
    Come posso ovviare?
    non utilizzando beforeunload.
    è una funzione limitatissima (per fortuna).

  4. #4
    Ti ringrazio, ma quale devo usare?

  5. #5
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,382
    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    Ho letto sia qui che in altri forum, l'evento "onbeforeunload" che dovrebbe intercettare la chiusura del browser o della tab.
    [...]
    ma a condizione che si interagisca con la pagina.
    Non capisco bene cosa intendi con "interagire con la pagina".

    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    Io non voglio interagire con la pagina, a me serve intercettare la chiusura, per scatenare un evento che mi richiami una pagina php, dove attraverso mysql nella tb_accessi registrerò il logout.
    Al momento non ho trovato nulla.
    Potete aiutarmi per favore?
    Non è fattibile, o quantomeno non è affidabile, per motivi intrinseci legati a come il Web funziona.
    Qualunque cosa si possa realizzare sarebbe un accrocchio e non sarebbe affidabile, nel senso che non si può garantire che avvenga l'evento che tu desideri, quindi in assenza di quello che chiami "logout", non avresti comunque la certezza se questa azione non è avvenuta, oppure se è avvenuta ma non è stata registrata.

    Quale sarebbe l'obiettivo di questo sistema? Intendo come valore di business che fornisce, o problema che dovrebbe risolvere.
    In base a considerazioni ulteriori sulla necessità reale, si possono trovare soluzioni alternative che siano comunque compatibili o un minimo affidabili e consistenti.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  6. #6
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,382
    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    questo è quello che fa al caso mio. [...]
    Quindi dai per scontato che non potrà mai esserci un errore che impedisca di inviare il dato?

    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    Ma deve funzionare soltanto come dicevo.
    Purtroppo, a volte le cose non funzionano come vorremmo, ma spesso ci sono dei buoni motivi alla base.

    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    Mi sono accorto che, se aggiorno la pagina, se clicco su un link, vado su una pagina e poi torno indietro, questa funzione viene sempre richiamata, ed è proprio quello che non voglio.
    Sì, perché si tratta di un evento di "unload": la pagina viene "scaricata" quando si naviga verso un'altra pagina.

    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    Come posso ovviare?
    Una tecnica potrebbe essere riscrivere l'intera applicazione trasformandola in una Single Page Application (SPA) e impedendo la "navigazione tradizionale"; in caso contrario, devi verificare su quale pagina sei ed eventualmente dove ti sposti.

    Riassumendo il parere già espresso ed esteso in questo commento, mi sento di citare un famoso detto filosofico: "Quando la fatica supera il gusto, abbandona l'evento e bevi lambrusco".
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  7. #7
    Buongiorno. Credo che adotterò il tuo consiglio "Quando la fatica supera il gusto, abbandona l'evento e bevi lambrusco".
    Ritornando a noi, condivido le tue spiegazioni passo passo, su quello che chiedevo, anche io avevo le mie perplessità, non do mai per scontato nulla per il web.
    Mi sarebbe piaciuto completare, la gestione dell'utente dal login al logout, ma come indichi dovrei riscriverlo come SPA.
    Boh!
    Ancora grazie e buona giornata.


  8. #8
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,382
    Quote Originariamente inviata da ANTAGONIA Visualizza il messaggio
    Mi sarebbe piaciuto completare, la gestione dell'utente dal login al logout, ma come indichi dovrei riscriverlo come SPA.
    Quello sarebbe solo un modo per evitare lo scatenarsi dell'evento sulla navigazione: rimarrebbero comunque tutte le altre problematiche legate al fatto che 1) non è detto che l'evento venga scatenato, 2) non è detto che la chiamata vada a buon fine.

    Se vuoi gestire un logout, offri l'opzione di logout. Sul server invece, puoi senz'altro programmare un logout a tempo, facendo in modo che alla scadenza della sessione - ovvero quando l'utente non interagisce più con il sito per diverso tempo - venga registrata l'informazione relativa.

    Quello che chiedi non è del tutto fattibile e/o affidabile perché la connessione HTTP(S) al server è "stateless": si manda una richiesta, si riceve una risposta e (salvo altri espedienti) la connessione si chiude subito.

    Potresti ricorrere anche all'uso di Web Socket, ma di nuovo... quanto è importante questa informazione di logout a livello di business?
    Vale la pena mettere in piedi tutto questo?
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.