2

IE8でページをリロードする方法をいくつか試しましたが、失敗しました。IEは、Webサーバーに要求せずに、内部キャッシュを使用し続けます。

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内のキャッシュをオフにすることを強制することなく)?

4

3 に答える 3

3

適切な方法は、応答でこれらのHTTPヘッダーを送信することです。

Pragma: no-cache
Expires: -1
Cache-Control: no-cache, no-store

それらを使用すると、他の変更なしですべてがIEで機能します。

于 2010-10-09T08:52:51.133 に答える
1

最も簡単な方法は、クエリ文字列に圧縮された日付/タイムスタンプを使用してパラメータを追加することです...これにより、ブラウザからはまったく新しいページのように見えます。

サーバーにデータをPOSTしている場合、IEはキャッシュをスキップして、新しいデータをロードします。ただし、GETリクエストのみを発行している場合、IEはURLと独自の設定を調べて、キャッシュからプルするか、実際にデータを取得するためにサーバーに移動するかを決定します。

これで、ユーザーが[保存されているページの新しいバージョンを確認する]を[しない]に設定している場合、クエリ文字列に値を追加する以外にできることはありません。これらのオプションに関するMSからの詳細情報については、 KB263070を参照してください。マイクロソフトの回答をざっと見てみると、これに噛まれた多くの人々がわかります。常に与えられる解決策は、ユーザーがキャッシュ設定を変更することです。

したがって、あなたにとっての解決策は、(複雑さのレベルで)

  1. 非常に可変的なクエリ文字列値を追加します
  2. [新しいバージョンを確認する]設定を[ページにアクセスするたびに]または[自動的に]に変更する必要があることをユーザーに通知します。
  3. リンクを変更して、ポストバックを発生させます。(うん)

多くのアプリケーションは、アイテム2またはアイテム1のいずれかを選択します。その理由は、2がコードベースへの影響が最も少なく、アイテム1がユーザーへの影響が最も少ないためです。

これが管理サイトの場合、ユーザーのデスクトップ設定に対してかなりのレバレッジが必要なので、オプション2を選択すると思います。

于 2010-10-07T19:12:56.740 に答える
0

うまくいけば、私はあなたの質問を理解します、多分これを試してみてください、これは明らかになります:

   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ディレクティブもあります。

于 2010-10-07T19:44:52.430 に答える