2012-04-03 32 views
8

Scenariusz jest taki, że użytkownik powinien otrzymać powiadomienie (np. Za pośrednictwem typowego alertu JS lub przekierowania itp.), Gdy jej sesja ma wkrótce wygasnąć. Kilka sposobów można to wykonać:Limit czasu sesji obsługi po stronie klienta

  1. Funkcja czasu javascript out zgodnie z wyjaśnieniami here.
  2. Korzystanie z WebSockets, które oczywiście wymagałyby obsługi HTML5.

Jakie są względne zalety/wady tych dwóch podejść? Oprócz nich, są inne sposoby, które można osiągnąć (niektóre standardowe biblioteki itp.). Mój koniec to Java EE (Struts + Spring).

Odpowiedz

6

Przy użyciu javascript funkcję czasu, trzeba upewnić się, że jeśli użytkownik jest podjęciem AJAX wywołuje czynność należy zresetować jak powinna być traktowana jako aktywność użytkownika.

Jeżeli używając Push serwer używając WebSockets może nie być w stanie kierować użytkowników z nie tak najnowszych przeglądarek. Być może będziesz musiał użyć niektórych frameworków sygnalizacyjnych, a nawet zmienić swój stos backendu. (Mogę myśleć o socket.io & SignalR od teraz)

Oba podejścia nie ulegają zniszczeniu z wdziękiem. Tak więc, opcja IMO javascript brzmi lepiej, ponieważ może być skierowana do szerszej publiczności, a to wymagałoby zastosowania się do niektórych scenariuszy skrajnych przypadków. Gdybym miał wybór, w ogóle nie zaimplementowałem tej funkcji. Ale tak się nie dzieje w ten sposób.

AKTUALIZACJA: Oto inne podejście, jakie mogłem wymyślić.

każdym razem, gdy strona służył dostaje bym wysłał cookie, które mogą być dostępne w po stronie klienta, który będzie zawierać czas UTC, w którym sesja będzie timeout. W moim kodzie umieściłbym setInterval, który odczytałby wartość i porównałby czas lokalny z UTC, a jeśli zamknie, wyświetli okno wyskakujące z informacją, że timeout nastąpi w X sekundach itd.

To znowu nie degraduje z wdziękiem i opiera się na czasie komputera klienta. Tak więc, jeśli jest źle, ta funkcjonalność nie będzie działać niezawodnie.

1

Co powiesz na tworzenie filtra, w którym ustawisz plik cookie z liczbą sekund do końca limitu czasu?

Tak, zawsze ustawić tę wartość do sesji (session-config>-timeout) * 60.

W przedniej stronie, przy użyciu setInterval, należy zaktualizować tę wartość cookie, odejmując interwał do bieżąca wartość cookie, dzięki czemu nie zależy to od konfiguracji czasu.

+0

Czy to jest nawet bezpieczne. Limit czasu sesji po stronie klienta można łatwo ominąć, wstrzykując kod js jak poprzez wtyczkę, która odświeża licznik co (czas wylogowania - 1) –

Powiązane problemy