2010-10-12 10 views
5

Gibt es eine Möglichkeit, Sitzungs-Timeout ohne (Benutzerinteraktion) * zu erkennen und auf eine bestimmte Seite umzuleiten; d. h. wenn es keine Aktivität auf Seite @ spezifische Dauer gibt; der Server erkennt es und leitet es automatisch auf einen anderen Server um.Automatische JSP-Umleitung nach Ablauf der Sitzung/Zeitüberschreitung

Von Benutzer Benutzerinteraktion meine ich; Es gibt eine Möglichkeit, das Sitzungszeitlimit zu erkennen, wenn der Benutzer auf etwas klickt, dann wird eine Anfrage an den Server gesendet und dann überprüft der Server, ob die aktuelle Benutzersitzung abgelaufen ist oder nicht.

Was ich hier brauche, ist, dass wir Server nichts mitteilen (oder keine Aktion ausführen), aber wenn die Sitzung abläuft, erkennt der Server sie automatisch und führt die erforderliche Aktion aus.

Danke, Raza

Antwort

3

Sie können natürlich so etwas tun in JavaScript durch ein Dokument weite Tastatur Implementierung und/oder Maus-Listener und eine periodische Methode mit einem 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 
    } 
} 

jetzt Ihre globalen Zuhörer haben nur lastActivity auf die aktuelle Zeit auf jede Aktion zu setzen.

Wenn Sie die Frage erneut lesen, möchten Sie das tatsächliche Sitzungszeitlimit vom Anwendungsserver verwenden. Das ist schwierig, denn wenn Sie Ajax-Anfragen an den Server senden, werden Sie die Sitzung tatsächlich nicht ablaufen lassen (es sei denn, es gibt eine harte Grenze), so dass meine Antwort immer noch der beste Weg ist, dies zu tun.

+0

ich eine Methode, wie dies in der Vergangenheit verwendet habe und es funktioniert gut.+1 – cjstehno

+0

danke, ich brauchte diese Sache wirklich, übrigens ich habe auch verwandten Link auf der gleichen Website http://stackoverflow.com/questions/1985250/notify-user-about-session-timeout-in-j2ee – user473445

0

Ich hatte etwas von dem gleichen Problem hier ist also, wie ich es gelöst ...

Im Grunde habe ich eine Session-Timer auf der Client-Seite mit Javascript. Ich sende regelmäßig einen Ajax-Aufruf (auf einem Zeitgeber, der kleiner ist als die tatsächliche Zeitüberschreitung des Servers), um die Sitzung auf dem Server am Laufen zu halten.

Dann habe ich einen anderen Timer erstellt, der auf der Client-Seite (auf die gleiche Zeit wie die tatsächliche Server-Timeout-Einstellung) herunter zählt. Wenn dieser Timer abläuft, wird ein Ajax-Aufruf an den Server gesendet, der session.invalidate() ausführt und dann zur Anmeldeseite weiterleitet. Dieser Timer wird jedes Mal zurückgesetzt, wenn eine Aktion ausgeführt wird, die die Sitzung am Leben erhalten soll (z. B. Mausklick, Tastendruck usw.)

7

Wenn die Anforderung besteht, nur auf die Anmeldeseite (oder eine andere Seite) umzuleiten, wird Sitzung Zeitüberschreitung, das ist, wie ich habe versucht, es zu implementieren:

Fügen sie die folgende scriptlet auf alle Seiten, die Login jeder Seite

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

auf diese Weise erfordert die Anmeldung wird aktualisiert erfordert/umleiten um sich einzuloggen. jsp (ändern Sie es Ihre gewünschte URL) nach der Sitzung abgelaufen

OR (zu vermeiden, alle Seiten fehlt)

Sie können es tatsächlich schreiben in einer separaten Datei (timedoutRedirect.jsp) und füge ihn als ein Header für alle Seiten, die Anmeldung mit „JSP Eigenschaftsgruppe“ (in erfordert 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> 

(Sie können den Auftakt uRL zu Ihren Projektspezifikationen anpassen müssen)

+0

thank @ gefunden Jimmy. Dieses Skript funktioniert für mich. – insanity