2

アプリケーションでは、ユーザーがログアウトしてブラウザの戻るボタンを押すと、特定のユーザーが前のページ (前のユーザーとしてログイン) に移動します。

ユーザーがインデックス(ログイン)ページでログアウトしたときにキャッシュをクリアするために、次のコードを試しました

<%
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-store");
response.setHeader("Expires", "0");
response.setDateHeader("Expires", -1);
%>

上記のコードは IE と firefox では問題なく動作しますが、google chrome では動作しません。

Google chrome でこの問題を解決するのを手伝ってくれる人はいますか。

前もって感謝します 。

4

2 に答える 2

1

ここには2つの間違いがあります:

  1. Cache-Controlヘッダーが不完全です。適切なヘッダーの完全なセットは次のとおりです。

    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); // Proxies.
    

    テストする前に、ブラウザーのキャッシュをクリアしたことを確認してください。

  2. これらのヘッダーは、ログイン ページだけでなく、制限されたページの応答にも設定する必要があります。最も簡単な方法は、制限されたページとまったく同じ URL パターンにマップされたサーブレット フィルターを作成し、それらのヘッダーをdoFilter()メソッドに設定することです。

    public class NoCacheFilter implements Filter {
    
        @Override
        public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException, ServletException {
            HttpServletResponse response = (HttpServletResponse) res;
            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); // Proxies.
            chain.doFilter(req, res);
        }
    
        // ...
    }
    

    ログインしているユーザーの存在を確認し、ログイン ページへのリダイレクトを処理する必要がある、制限されたページの URL パターンで既にカスタム フィルターを使用している場合は、まったく同じフィルターでジョブを実行することもできます。代わりは。

于 2012-06-18T12:29:39.697 に答える
1

以下を変更する必要があります。

response.setHeader("Cache-Control", "no-store");

に:

response.setHeader("Cache-Control", "no-cache, no-store, must-revalidate");

詳細については、この投稿をお読みください。

于 2012-06-18T05:15:04.120 に答える