4
<%
    response.setHeader("Cache-Control","no-cache,no-store,must-revalidate");//HTTP 1.1
    response.setHeader("Pragma","no-cache"); //HTTP 1.0
    response.setDateHeader ("Expires", 0); //prevents caching at the proxy server
%>

ログアウト後、ログインページに戻るときに戻るボタンをクリックすると、ログイン時に古いページが表示されます。私はjspで上記の3行を使用しており、これをbodyタグ内のすべてのjspに含めています。これは一部のjspsでは機能しません。ログアウト後にキャッシュを停止するために考慮する必要があることは何ですか。Postメソッドのフォームを持つjspの場合、この手法は機能しませんか?

ログアウトアクションでは、これを行っています。

Cookie logoutCookie = new Cookie("somename", null);
logoutCookie.setPath("/somename");
logoutCookie.setMaxAge(0);
ServletActionContext.getResponse().addCookie(logoutCookie);

ありがとう。

4

4 に答える 4

2

ブラウザから戻るボタンを使用している場合、できることは何もありません。ページは常にキャッシュから取得されます。

ユーザーがログアウトをクリックしたときに、必ずセッションを無効にしてください。そうすれば、ユーザーが「戻る」を押してページを使用しようとすると、ログインページにリダイレクトされます(サイトが正しくプログラムされている場合)。

[編集]

http1.1のキャッシュを持たないようにするために配置したヘッダーは次のとおりです。

httpResponse.setHeader("Cache-Control", "private,no-store,no-cache");
于 2012-04-26T11:44:51.153 に答える
2

これをbodyタグ内のすべてのjspsに含めています

その時点でHTTP応答がすでにコミットされている場合、これは遅すぎる可能性があります。X量の文字がすでに書き込まれている場合、HTTP応答がコミットされます。これは、あなたの場合はHTMLになります<head><body>これらの行は、HTML表現ではなく、JSPファイルの一番上に配置する必要があります。


無関係なことに、同じコード行を複数のファイルにコピーして貼り付けることで、設計上の大きな間違いを犯しています。これはDRYではありません。コードをコピーして貼り付ける必要があるときはいつでも、停止して、特定のコードを実行する場所が1つもないかどうかを自問する必要があります。Filter特定のケースでは、代わりに使用する必要があります。具体的な例については、次の回答も参照してください。ログアウト後に、以前にアクセスしたセキュリティで保護されたページがユーザーに表示されないようにします。また、JSPでJavaコードを書くことは悪い習慣です。JSPファイルでJavaコードを回避する方法を確認してください。

また、ログアウト方法がおかしいです。ユーザー名をカスタムCookieに保存しないでください。あなたは基本的にセッションを作り直しています。代わりに、ログインしたユーザーをセッション属性として保存し、セッション全体を無効にしてリダイレクトを送信するだけです。

request.getSession().invalidate();
response.sendRedirect(request.getContextPath() + "/home.jsp");

セッションの動作に関する背景情報については、次をお読みください:サーブレットはどのように機能しますか?インスタンス化、セッション、共有変数、マルチスレッド

于 2012-04-26T14:04:38.587 に答える
0

試しましたresponse.setHeader("Cache-control","no-store"); response.setHeader("Pragma","no-cache"); response.setDateHeader("Expires", -1);か?私はあなたが正しい場所で引用符を逃していると思います。

于 2012-04-26T09:20:11.387 に答える
0

ログイン資格情報が一致した直後に、セッション属性を作成し、たとえば「有効」とし、jspでnull以外の値で初期化します。次に、次のコードを使用してverify.jspを作成します。

<%
response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate"); // HTTP 1.1.
response.setHeader("Pragma", "no-cache"); // HTTP 1.0.
if(session.getAttribute("valid")==null)
{
    out.println("<script>parent.location.href='login.jsp'</script>");
}
%>

次に、このjspファイルを各jspページに含めて完了します。「session.invalidate();」と書くことを忘れないでください。logout.jspで

それがうまくいくことを願っています..!!!

于 2014-08-28T09:20:44.790 に答える