2011-01-15 16 views
0

私は、ユーザーオブジェクトを格納するセッションを使用するマルチユーザーログインアプリケーションを実行しています。Strutsベースアプリケーションでのセッションの問題

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

すべてのページで、ユーザーオブジェクトがセッションに存在するかどうかをJSTLを使用して確認しています。

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

私の問題は、ユーザーがアプリケーション内のhrefリンクをクリックすると、そのセッションで前のユーザーに変更されるということです。すなわち、キャッシュからユーザをロードしている。ページを更新すると、正しいユーザーが読み込まれます。

どうすれば修正できますか?

答えて

0

まず、セッションはサーバーに保存され、クライアントキャッシュとは関係ありません。

以前のユーザーはキャッシュから読み込まれません(あなたの言うとおり)、リンクはGETでサーバーに送られるため、キャッシュからページが読み込まれます。最後にリクエストされてからURLが変更されなかった場合、ブラウザはGETの結果をキャッシュすることができます。

この問題を解決するには、クライアントキャッシュを無効にする必要があります。 HTTP cache header directivesまたはby adding meta tags in the pageを追加することでこれを行うことができます。

プロキシは通常、ページの内容を読み取らないので、クライアントがページをクライアントキャッシュに保存しなくても、プロキシサーバー上のキャッシュで終了する可能性があるので、HTTPヘッダーを使用することをお勧めします。