web-dev-qa-db-ja.com

MVC4でブラウザの戻るボタンをクリックするとブラウザのキャッシュをクリアする方法は?

これはstackoverflowでよくある質問です。私は同じ質問をすべて経験しましたが、私にとって正しい答えを見つけることができません。これはログアウトコントローラーのアクション結果です

    [Authorize]       
    public ActionResult LogOut(User filterContext)
    {
        Session.Clear();
        Session.Abandon();
        Session.RemoveAll();
        Response.Cache.SetCacheability(HttpCacheability.NoCache);
        Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
        Response.Cache.SetNoStore();
        FormsAuthentication.SignOut();
        return RedirectToAction("Home", true);

    }

私にはうまくいきませんでした。私も追加してみました

<meta http-equiv="Cache-Control" content="no-cache" /><meta http-equiv="Pragma" content="no-cache"/><meta http-equiv="Expires" content="0"/>

これらのいずれも私の問題を解決しませんでした。

20
Sandy

アプローチの問題は、MVCが適用するには遅すぎる場所に設定していることです。コードの次の3行を、表示したくないビュー(結果としてページ)を表示するメソッドに配置する必要があります。

Response.Cache.SetCacheability(HttpCacheability.NoCache);
Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
Response.Cache.SetNoStore();

すべてのページに「ブラウザバックにキャッシュなし」動作を適用する場合は、global.asaxに配置する必要があります。

protected void Application_BeginRequest()
{
    Response.Cache.SetCacheability(HttpCacheability.NoCache);
    Response.Cache.SetExpires(DateTime.UtcNow.AddHours(-1));
    Response.Cache.SetNoStore();
}
50
von v.

アクションに出力キャッシュを設定するだけです。私はこのアプローチを多くのプロジェクトで使用しています。

[HttpGet, OutputCache(NoStore = true, Duration = 1)]
public ActionResult Welcome()
{
    return View();
}

上記の属性は基本的に、ユーザーがビューに戻る/進む場合にコントローラーアクションからページの新しいコピーを取得するようブラウザーに指示します。

また、web.configでキャッシュを定義し、この属性と組み合わせて使用​​して、繰り返しを避けることもできます。 こちら をご覧ください

13
MarkG