Come posso gestire l'evento di chiusura di un browser per attivare un logout?Come chiamiamo il logout servlet sul browser close event
risposta
Ho cercato una soluzione coerente a questo problema qualche tempo fa e la mia decisione era di gestire la situazione senza credere al browser o all'utente.
Non puoi sapere con certezza se un utente lascia la tua pagina e quando, e anche se usi "onunload", potresti non ottenere l'evento prima che il browser si chiuda o lasci la tua pagina. E i crash del browser non ti daranno alcun tipo di segnale, quindi credendo di sapere che l'utente sta ancora visualizzando la tua pagina e che potrebbero intraprendere ulteriori azioni è difettoso.
Il meglio che si può fare per disconnettere un utente è un timeout della sessione appropriato, e se si ha bisogno di ulteriore controllo, si può provare ad aggiungere chiamate AJAX su pagine critiche con i segnali "Sono vivo" e poi uscire utenti che non rispondono più (ciò richiederebbe il browser abilitato AJAX/JS e potrebbe escludere i potenziali utenti).
Stai cercando l'onunload:
window.onunload = function() {
// check the window is closed (see point 1 below)
// do log out
}
ci sono 2 problemi con questo:
- Si chiama ogni volta che l'utente si sposta dalla pagina, rinfresca, o in generale scarica pure come quando la finestra del browser è chiusa.
- Non sembra esserci un comportamento coerente tra i browser.
Si consiglia di utilizzare un approccio diverso.
Devi andare con il timeout della sessione. Dal momento che hai taggato la tua domanda JSP, penso che sia un'applicazione web java di cui stai parlando.
Generalmente si dispone di un listener di timeout di sessione e il codice di "disconnessione" è presente nel listener.
Generalmente non fare affidamento sugli eventi lato client: un arresto anomalo del browser/sistema, l'arresto senza chiudere il browser ecc non attiverà gli eventi.
pls puoi specificarlo in dettaglio o puoi mandarmi un esempio – DJJ
- 1. javascript on window close event
- 2. Capture event onclose browser
- 3. Detect Browser Close su Asp.net
- 4. sessione servlet, dopo il logout, quando viene premuto il pulsante Indietro del browser, viene visualizzata nuovamente la pagina protetta
- 5. Come lo chiamiamo?
- 6. contdown sul Servlet Sessione
- 7. Invalidate il token push del dispositivo iOS sul logout utente
- 8. Previene il pulsante Indietro dopo il logout
- 9. Il modo migliore per rilevare la chiusura/navigazione del browser verso un'altra pagina e fare il logout
- 10. JavaFX: Stage close handler
- 11. Perché chiamiamo doesNotRecognizeSelector: method?
- 12. Come posso gestire l'evento Close in Socket.io?
- 13. Sagas basati sul tempo con Event Sourcing
- 14. Transizione tra l'elemento close close close
- 15. Visualizza Pdf nel browser utilizzando il servlet java
- 16. Come posso ottenere informazioni sul client come SO e browser
- 17. pulsante di logout di Facebook e reindirizzare dopo il logout
- 18. Eliminazione logout e cookie CAS
- 19. Logout di Windows ASP.NET logout
- 20. Node.js: socket.io close client connection
- 21. Come specificare il parametro di timeout della richiesta HTTP sul contenitore di servlet Java
- 22. Come Google gestisce il pulsante Indietro dopo il logout?
- 23. Registrazione audio sul browser
- 24. Pulsante CodeIgniter indietro dopo il logout
- 25. fa close() chiama fsync() su Linux?
- 26. Come utilizzare php-amqplib rabbitMQ sul browser web
- 27. CKEditor close dialog
- 28. Come chiudere QApplication con garbo al logout?
- 29. Come ottenere il contesto servlet da ServletRequest in Servlet 2.5?
- 30. Come cancellare la cache del browser sul pulsante Indietro del browser fare clic su MVC4?
+1 - non fare affidamento sui browser. – Nivas
Sono d'accordo con la soluzione, ma voglio aggiungere questa gestione per disconnettersi automaticamente quando l'utente chiude il browser prima di disconnettersi. nella mia applicazione se l'utente chiude direttamente il browser senza eseguire il logout, quindi non può effettuare il login prima di 20 minuti. – DJJ
Ricorda che indipendentemente da ciò che ti viene in mente, non importa quanto intelligente, un segnale di uscita non è MAI garantito, come ho spiegato sopra. Puoi inviare un comando di disconnessione usando "onunload", ma dovrai gestirlo correttamente in modo da non escludere un utente che sta navigando verso un'altra pagina del tuo sistema, in più non funzionerà sempre. La mia onesta opinione è che non ne vale la pena. Basta vivere con le sessioni perse uccise dal timeout. – mdrg