asp.netアプリでアイテムをキャッシュしたページに戻るユーザーを処理する最良の方法は何ですか? 戻るボタン (イベント?) をキャプチャしてキャッシュを処理する良い方法はありますか?
5 に答える
役立つ場合は、 HttpResponse.Cacheプロパティを使用してみてください。
Response.Cache.SetExpires(DateTime.Now.AddSeconds(60));
Response.Cache.SetCacheability(HttpCacheability.Public);
Response.Cache.SetValidUntilExpires(false);
Response.Cache.VaryByParams["Category"] = true;
if (Response.Cache.VaryByParams["Category"])
{
//...
}
または、 HttpResponse.CacheControlを使用してページのキャッシュを完全にブロックすることもできますが、上記のCacheプロパティを優先して非推奨になりました。
Response.CacheControl = "No-Cache";
編集:または、あなたは本当に気が狂って、それをすべて手作業で行うことができます:
Response.ClearHeaders();
Response.AppendHeader("Cache-Control", "no-cache"); //HTTP 1.1
Response.AppendHeader("Cache-Control", "private"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "no-store"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "must-revalidate"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "max-stale=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "post-check=0"); // HTTP 1.1
Response.AppendHeader("Cache-Control", "pre-check=0"); // HTTP 1.1
Response.AppendHeader("Pragma", "no-cache"); // HTTP 1.1
Response.AppendHeader("Keep-Alive", "timeout=3, max=993"); // HTTP 1.1
Response.AppendHeader("Expires", "Mon, 26 Jul 1997 05:00:00 GMT"); // HTTP 1.1
私が知っている限り (または少なくとも読んだことはあります)、ユーザー イベントに応答して動作するのではなく、「ページ内」で考えるのが最善です..
戻るボタンが押されても気にしないようにアプリケーションを設計してください。それを処理するだけです。これは、開発の観点からは少し余分な作業を意味するかもしれませんが、全体として、アプリケーションはより堅牢になります。 .
つまり、ステップ 3 でいくつかのデータ変更が行われた場合、ユーザーがクリックして (ステップ 2 に) 戻り、もう一度 [次へ] をクリックすると、アプリケーションは変更が行われたかどうかを確認します。最後に「OK」をクリックします。このようにして、すべての変更が保存され、ロード時に以前に入力した値に基づいてフォームを毎回再入力できます。
それが理にかなっていることを願っています:)
RFC2616§13.13は、履歴とキャッシュは異なるものであると述べています。キャッシュが[戻る]ボタンに影響を与える方法は絶対にありません。
HTTPヘッダーの組み合わせが[戻る]ボタンに影響する場合、それはブラウザのバグです…1つの例外があります。
HTTP SCache-control: must-revalidate
では、ブラウザは、戻るボタンが使用されたときにページを更新する要求として解釈します(Mozillaはそれを「愚かな銀行モード」と呼んでいます)。これはプレーンHTTPではサポートされていません。
次のコードは、IE9+、FF21、および最新の Chrome で機能しました。
Response.Cache.SetCacheability(HttpCacheability.NoCache | HttpCacheability.Private);
Response.Cache.AppendCacheExtension("must-revalidate");
Response.Cache.AppendCacheExtension("max-age=0");
Response.Cache.SetNoStore();
これをPage_Load()
MasterPage のイベント ハンドラーに配置して、戻るボタンを押したときにアプリのすべてのページでサーバーへの往復が必要になるようにすることができます。
これに対処する最善の方法は、ASP.NET ページ (または使用している場合はマスター ページ) にキャッシュなしディレクティブを配置することです。これを ASP.NET コードで直接処理する方法はないと思います (キャッシュの決定はクライアントで行われるため)。
MVC に関しては、それをどのように達成するかわかりません (Web フォームベースの ASP.NET とは異なると仮定して)。私はそれを使用していません。