2009-12-31 9 views
7

Moim żądaniem jest powiadomienie użytkownika za pomocą okienka informującego, że sesja użytkownika ma upłynąć w ciągu x sekund, w przypadku, gdy użytkownik nie wykona żadnej czynności na stronie internetowej.Powiadamianie użytkownika o limicie czasu sesji w Javie EE

Dodatkiem do tego wymogu jest dynamiczne zmniejszanie wartości x sekund w wyskakującym okienku.

Środowisko, którego używam to Java EE.

Odpowiedz

10

Skorzystaj z HttpSession#getMaxInactiveInterval() i setTimeout(). Ajax nie jest potrzebny w tym konkretnym celu, chyba że chcesz odłożyć limit czasu na każdą aktywność klienta (odpytywanie).

Podstawowe przykład:

<script> 
    var secondsBeforeExpire = ${pageContext.session.maxInactiveInterval}; 
    var timeToDecide = 15; // Give client 15 seconds to choose. 
    setTimeout(function() { 
     alert('Your session is about to timeout in ' + timeToDecide + ' seconds!') 
    }, (secondsBeforeExpire - timeToDecide) * 1000); 
</script> 

Aby zmniejszyć czas wewnątrz wiadomości magicznie, a następnie zamiast podstawowego alert() musisz nakładkę z div w którym masz kontrolę nad zawartością poprzez HTML DOM drzewa i użyj innej setTimeout() na 1 sekundę, aby zmienić tekst dynamicznie.

Należy zauważyć, że skrypt ten musi być obsługiwany przez JspServlet, aby moduł EL działał. Dlatego musisz umieścić skrypt w kodzie HTML <head> strony JSP, lub jeśli naprawdę chcesz mieć wszystkie JS w oddzielnym pliku *.js, musisz także pozwolić, aby JspServlet obsługiwał również dowolne żądania.

+0

Naprawdę pomocna sugestia i do rzeczy. Dzięki. –

+0

Masz rację, nie ma ścisłej potrzeby AJAX, ale miłą rzeczą w używaniu 'XMLHttpRequest' do aktualizacji sesji jest to, że użytkownik nie będzie musiał odejść, aby uniknąć przekroczenia limitu czasu. Może to być przydatne przy wypełnianiu formularza na przykład. –

+0

"jeśli naprawdę chcesz mieć wszystkie JS w oddzielnym pliku * .js, musisz pozwolić JspServletowi obsługiwać także dowolne żądania * .js" - czy możesz to wyjaśnić, nie znam JS, i muszę umieścić tę funkcję w oddzielnym pliku * .js, ponieważ mam dużo stron jsp? Co powinienem zrobić, żeby to działało w ten sposób? @BalusC –

1

Nie sądzę, że Java/Java EE będzie tu naprawdę pomocna, ponieważ trzeba to zrobić po stronie klienta (np. Przy użyciu JavaScript). Jednym z rozwiązań, które przychodzi mi na myśl, byłoby ustawienie rodzaju timera, który powiadomiłby użytkownika kilka minut przed upływem czasu serwera.

Podczas googlowania o to, znalazłem Erica Pascarello za Update User's Session with AJAX blogu (i Reaktywacja wersję Updating User Session with Ajax - Round 2), który dokładnie opisuje takie rozwiązanie (i używać XMLHttpRequest zaktualizować sesji). Jego skrypt zarządzania sesji Ajax jest dostępny pod numerem here.

+0

BTW Żaden z linków nie działa –

+0

Łącze do skryptu jest w porządku, a inne dwa można znaleźć w archiwum internetowym: https://web.archive.org/web/20081203190028/http://radio.javaranch .com/pascarello/2005/10/25/1130246930301.html –

Powiązane problemy