2010-10-21 13 views

risposta

10

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).

+2

+1 - non fare affidamento sui browser. – Nivas

+1

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

+1

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

5

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:

  1. Si chiama ogni volta che l'utente si sposta dalla pagina, rinfresca, o in generale scarica pure come quando la finestra del browser è chiusa.
  2. Non sembra esserci un comportamento coerente tra i browser.

Si consiglia di utilizzare un approccio diverso.

3

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.

+0

pls puoi specificarlo in dettaglio o puoi mandarmi un esempio – DJJ

Problemi correlati