23

これは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"/>

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

4

2 に答える 2

51

あなたのアプローチの問題は、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();
}
于 2013-05-02T12:01:07.437 に答える
14

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

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

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

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

于 2013-05-03T18:07:07.340 に答える