2010-10-21 4 views

Odpowiedz

10

Poszukałem spójnego rozwiązania tego problemu jakiś czas temu, a moja decyzja polegała na tym, aby poradzić sobie z sytuacją, nie wierząc w przeglądarkę ani użytkownika.

Nie możesz na pewno wiedzieć, czy użytkownik opuszcza twoją stronę i kiedy, nawet jeśli używasz "onunload", możesz nie dostać tego wydarzenia, zanim przeglądarka zamknie lub opuści twoją stronę. A awarie przeglądarki nie dają żadnego sygnału, więc wierzenie w to, że użytkownik nadal ogląda twoją stronę i może podjąć dalsze działania jest wadliwe.

Najlepszym sposobem na wylogowanie użytkownika jest ustawienie odpowiedniego limitu czasu sesji, a jeśli potrzebujesz dalszej kontroli, możesz spróbować dodać wywołania AJAX na krytycznych stronach za pomocą sygnałów "Jestem żywy", a następnie wylogować się. użytkowników, którzy już nie odpowiadają (wymagałoby to przeglądarki obsługującej AJAX/JS i mogą wykluczyć potencjalnych użytkowników).

+2

+1 - nie polegaj na przeglądarkach. – Nivas

+1

Zgadzam się z twoim rozwiązaniem, ale chcę dodać tę obsługę, aby wylogować się automatycznie po zamknięciu przeglądarki przed wylogowaniem. w mojej aplikacji, jeśli użytkownik bezpośrednio zamyka przeglądarkę bez wylogowania, użytkownik nie może się zalogować przed 20 minutami. – DJJ

+1

Pamiętaj, że niezależnie od tego, co wymyślisz, nie ważne jak sprytnie, sygnał wylogowania NIGDY nie jest zapewniony, jak wyjaśniłem powyżej. Możesz wysłać polecenie wylogowania za pomocą polecenia "onunload", ale musisz odpowiednio się z nim postarać, aby nie wyłapać użytkownika nawigującego na innej stronie systemu, a ponadto nie będzie on działał przez cały czas. Moja szczera opinia jest taka, że ​​nie jest to warte wysiłku. Po prostu żyj, gdy stracone sesje zostaną zabite przez timeout. – mdrg

5

Patrzysz na onUnload:

window.onunload = function() { 
    // check the window is closed (see point 1 below) 
    // do log out 
} 

Są 2 problemy z tym:

  1. Nazywa gdy użytkownik przechodzi daleko od strony, odświeża, lub ogólnie zwalnia także tak jak przy zamknięciu okna przeglądarki.
  2. Wygląda na to, że nie ma spójnego zachowania między przeglądarkami.

Polecam stosowanie innego podejścia.

3

Musisz przejść z limitem czasu sesji. Ponieważ otagowałeś swoje pytanie JSP, myślę, że jest to aplikacja internetowa Java, o której mówisz.

Zazwyczaj posiadasz program nasłuchujący sesji i masz kod "wylogowania" w detektorze.

Zasadniczo nie należy polegać na zdarzeniach po stronie klienta: awaria przeglądarki/systemu, wyłączenie bez zamykania przeglądarki itp. Nie wywoła zdarzeń.

+0

pls można podać w szczegółach lub możesz wysłać mi przykład – DJJ