9

asp.netアプリでアイテムをキャッシュしたページに戻るユーザーを処理する最良の方法は何ですか? 戻るボタン (イベント?) をキャプチャしてキャッシュを処理する良い方法はありますか?

4

5 に答える 5

7

役立つ場合は、 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 
于 2008-08-23T16:10:11.200 に答える
6

私が知っている限り (または少なくとも読んだことはあります)、ユーザー イベントに応答して動作するのではなく、「ページ内」で考えるのが最善です..

戻るボタンが押されても気にしないようにアプリケーションを設計してください。それを処理するだけです。これは、開発の観点からは少し余分な作業を意味するかもしれませんが、全体として、アプリケーションはより堅牢になります。 .

つまり、ステップ 3 でいくつかのデータ変更が行われた場合、ユーザーがクリックして (ステップ 2 に) 戻り、もう一度 [次へ] をクリックすると、アプリケーションは変更が行われたかどうかを確認します。最後に「OK」をクリックします。このようにして、すべての変更が保存され、ロード時に以前に入力した値に基づいてフォームを毎回再入力できます。

それが理にかなっていることを願っています:)

于 2008-08-22T18:23:25.523 に答える
2

RFC2616§13.13は、履歴とキャッシュは異なるものであると述べています。キャッシュが[戻る]ボタンに影響を与える方法は絶対にありません。

HTTPヘッダーの組み合わせが[戻る]ボタンに影響する場合、それはブラウザのバグです…1つの例外があります。

HTTP SCache-control: must-revalidateでは、ブラウザは、戻るボタンが使用されたときにページを更新する要求として解釈します(Mozillaはそれを「愚かな銀行モード」と呼んでいます)。これはプレーンHTTPではサポートされていません。

于 2008-10-19T22:47:52.757 に答える
0

次のコードは、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 のイベント ハンドラーに配置して、戻るボタンを押したときにアプリのすべてのページでサーバーへの往復が必要になるようにすることができます。

于 2015-02-11T23:36:39.627 に答える
0

これに対処する最善の方法は、ASP.NET ページ (または使用している場合はマスター ページ) にキャッシュなしディレクティブを配置することです。これを ASP.NET コードで直接処理する方法はないと思います (キャッシュの決定はクライアントで行われるため)。

MVC に関しては、それをどのように達成するかわかりません (Web フォームベースの ASP.NET とは異なると仮定して)。私はそれを使用していません。

于 2008-08-22T18:22:21.233 に答える