これは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"/>
これらのいずれも私の問題を解決しませんでした。
アプローチの問題は、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();
}
アクションに出力キャッシュを設定するだけです。私はこのアプローチを多くのプロジェクトで使用しています。
[HttpGet, OutputCache(NoStore = true, Duration = 1)]
public ActionResult Welcome()
{
return View();
}
上記の属性は基本的に、ユーザーがビューに戻る/進む場合にコントローラーアクションからページの新しいコピーを取得するようブラウザーに指示します。
また、web.configでキャッシュを定義し、この属性と組み合わせて使用して、繰り返しを避けることもできます。 こちら をご覧ください