IEにページを取得するように強制します
-
28-09-2019 - |
質問
IE8にページのリロードを取得するために多くの方法を試しましたが、失敗しました。つまり、Webサーバーに尋ねることなく、内部キャッシュを使用し続けています。
私は私のウェブサーバーから次のヘッダーを送信します:
Response.Add(new StringHeader("Expires", DateTime.UtcNow.AddYears(-1).ToString("r")));
Response.Add(new StringHeader("Cache-Control", "no-store, no-cache, must-revalidate, max-age=0"));
Response.Add(new StringHeader("Pragma", "no-cache"));
Response.Add(new StringHeader("Last-Modified", DateTime.UtcNow.ToString("r")));
それは私が試した多くの組み合わせの1つにすぎません。
IEを毎回ページを取得するにはどうすればよいですか(ユーザーがIE内のキャッシュをオフにするように強制せずに)?
解決
適切な方法は、これらのHTTPヘッダーを応答に送信することです。
Pragma: no-cache
Expires: -1
Cache-Control: no-cache, no-store
それらを使用すると、他の変更なしにすべてがIEで機能します。
他のヒント
最も簡単な方法は、クエリ文字列に圧縮日付/タイムスタンプを使用してパラメーターを追加することです。これにより、ブラウザのまったく新しいページのように見えます。
簡単な更新, 、サーバーにデータを投稿する場合、IEはキャッシュをスキップして新しいデータをロードします。ただし、Get Requestsのみを発行している場合、IEはURLを調べて、キャッシュから引っ張るか実際にサーバーに移動するかを判断する独自の設定です。
これで、ユーザーが「保存されたページの新しいバージョンのチェック」がない場合、クエリ文字列に値を追加する以外にできることは何もありません。見る KB263070 これらのオプションに関するMSの詳細については。 Microsoftの回答をすばやく見ると、これに少し多くの人がいることが示されています。常に与えられているソリューションは、ユーザーがキャッシュ設定を変更することです。
だから、あなたにとって、解決策は(複雑さのレベルで)になるだろう
- 非常に変動するクエリ文字列値を追加します
- ユーザーに、「新しいバージョンのチェック」設定をページに訪問するたびに、または自動的に変更する必要があることを通知します。
- リンクを変更して、ポストバックを引き起こします。 (ヤック)
多くのアプリケーションは、アイテム2またはアイテム1のいずれかを選択します。その理由は、2がコードベースに最も影響が少ないため、アイテム1はユーザーに最も影響が少ないためです。
これが管理サイトである場合、ユーザーのデスクトップ設定にかなりのレバレッジがあるはずなので、オプション2を使用すると思います。
うまくいけば、私はあなたの質問を理解しています、多分これを試してみてください、これは明らかになります:
List<string> keys = new List<string>();
IDictionaryEnumerator enumerator = Cache.GetEnumerator();
while (enumerator.MoveNext())
{
keys.Add(enumerator.Key.ToString());
}
foreach(string key in keys)
{
Cache.Remove(key);
}
これが複数のページにある必要がある場合は、マスターページに配置できます(または、他のリファクタリングを使用します)。
上記があなたが探しているものではない場合、outputCacheディレクティブもあります。