2010-10-12 15 views
5

Czy istnieje sposób na wykrycie limitu czasu sesji bez (interakcji użytkownika) * i przekierowanie go na jakąś stronę; tj. jeśli nie ma żadnej aktywności na stronie @ określony czas; serwer wykrywa to i przekierowuje automatycznie na inne.Automatyczne przekierowanie JSP po wygaśnięciu sesji/przekroczeniu limitu czasu

Przez interakcję użytkownika mam na myśli; istnieje sposób na wykrycie limitu czasu sesji, gdy użytkownik kliknie na coś, następnie niektóre żądania trafiają do serwera, a następnie serwer sprawdza, czy bieżąca sesja użytkownika wygasła, czy też nie.

Potrzebuję tutaj, abyśmy nie informowali niczego o serwerze (lub nie wykonaliśmy żadnej akcji), ale po wygaśnięciu sesji serwer wykrywa go automatycznie i wykonuje wymagane działania.

Dzięki Raza

Odpowiedz

3

Można oczywiście zrobić coś takiego w JavaScript przez wdrożenie klawiaturę całego dokumentu i/lub słuchacza myszy i okresową metodę z timeout.

var timeOut = 1000 * 60 * 30; // 30 minutes 
var lastActivity = new Date().getTime(); 
var checkTimeout; 
checkTimeOut = function(){ 
    if(new Date().getTime() > lastActivity + timeOut){ 
     // redirect to timeout page 
    }else{ 
     window.setTimeout(checkTimeOut, 1000); // check once per second 
    } 
} 

teraz globalnych słuchacze po prostu trzeba ustawić lastActivity do chwili obecnej na każdy działania.

Po ponownym przeczytaniu pytania, chcesz użyć faktycznego limitu czasu sesji z serwera aplikacji. To trudne, ponieważ kiedy wyślesz zapytania ajaxowe na serwer, sesja nie będzie miała końca (chyba że istnieje twardy limit), więc moja odpowiedź może być najlepszym sposobem na zrobienie tego.

+0

Użyłem metody jak to w przeszłości i to działa dobrze.+1 – cjstehno

+0

dziękuję, naprawdę potrzebowałem tego, btw, znalazłem również powiązany link na tej samej stronie http://stackoverflow.com/questions/1985250/notify-user-about-session-timeout-in-j2ee – user473445

0

miałem nieco z tego samego problemu tak oto w jaki sposób rozwiązać go ...

Zasadniczo stworzyłem czasomierza sesji po stronie klienta z javascript. Okresowo wysyłam wywołanie ajax'a (na zegarze, który jest mniejszy niż rzeczywiste ustawienie limitu czasu serwera), aby utrzymać sesję przy życiu na serwerze.

Następnie utworzyłem inny zegar, który odlicza po stronie klienta (ustawiony na taki sam czas, jak rzeczywiste ustawienie limitu czasu serwera). Jeśli ten czas wygaśnie, wywoływane jest wywołanie ajaxa na serwerze, który uruchamia session.invalidate(), a następnie przekazuje dalej stronę logowania. Ten licznik czasu jest resetowany za każdym razem, gdy jest jakieś działanie, które powinno utrzymać sesję przy życiu (np. Kliknięcie myszą, naciśnięcie klawisza itp.).

7

Jeśli wymagana jest tylko przekierowanie do strony logowania (lub dowolnej innej strony) po Upłynął limit czasu sesji, to w jaki sposób starałem się go wdrożyć:

Dołącz następujący scriptlet do wszystkich stron, które wymaga zalogowania

<% 
int timeout = session.getMaxInactiveInterval(); 
response.setHeader("Refresh", timeout + "; URL = login.jsp"); 
%> 

ten sposób dowolną stronę, która wymaga logowania będzie odświeżyć/przekierować się zalogować. jsp (zmień wybrany adres URL) po przekroczeniu limitu czasu

OR (aby uniknąć brakuje żadnych stron)

Rzeczywiście można napisać go w oddzielnym pliku (timedoutRedirect.jsp) i umieścić go jako nagłówek do wszystkich stron, które wymaga logowania przy użyciu „grupę właściwości JSP” (w web.xml)

<jsp-property-group> 
     <display-name>all jsp</display-name> 
     <url-pattern>/users/*</url-pattern> 
     <include-prelude>/timedoutRedirect.jsp</include-prelude>   
</jsp-property-group> 

(być może trzeba będzie dostosować url preludium do specyfikacji projektowych)

+0

thank @ Jimmy. ten scriplet działa dla mnie. – insanity

Powiązane problemy