2011-01-15 8 views
0

Ich mache eine Multi-User-Login-Anwendung, wo ich Sitzung verwenden, um das Benutzerobjekt zu speichern.Session-Problem in Struts-basierte Anwendung

HttpSession session = request.getSession(true); 
    session.setAttribute("user",user); 

In jeder Seite überprüfe ich mit JSTL, ob das Benutzerobjekt in der Sitzung vorhanden ist.

<c:choose> 
    <c:when test="${not empty sessionScope.user}"> 
    //jsp code 
    </c:when> 
    <c:otherwise> 
    <logic:redirect forward="welcome"/> 
    </c:otherwise> 
</c:choose> 

Mein Problem ist, dass, wenn der Benutzer klickt auf einen Link href in der Anwendung der Benutzer Änderungen zu vorherigen Benutzer in der Sitzung. d. h. es lädt den Benutzer aus dem Cache. Wenn ich die Seite aktualisiere, wird der richtige Benutzer geladen.

Wie könnte ich es beheben?

Antwort

0

Zunächst ist Sitzung auf Server gespeichert und hat nichts mit Client-Cache zu tun.

Der vorherige Benutzer wurde nicht aus dem Cache geladen (wie Sie sagen), die Seite wird aus dem Cache geladen, da Links auf einem GET zum Server gehen. Der Browser kann das Ergebnis eines GETs zwischenspeichern, wenn sich die URL seit der letzten Anforderung nicht geändert hat.

Um dies zu beheben, müssen Sie den Client-Cache ungültig machen. Sie können das tun, indem Sie HTTP cache header directives oder by adding meta tags in the page hinzufügen.

Ich würde vorschlagen, mit HTTP-Header gehen, da Proxies in der Regel nicht den Inhalt der Seite lesen und Sie möglicherweise mit einem Cache auf einem Proxy-Server enden, auch wenn der Client die Seite nicht im Client-Cache speichert.