2

認証Cookieを割り当てるために、HttpModuleを使用してWebサイトへの各リクエストをインターセプトしています。これは暫定バージョンですが、HttpModuleに静的リストがあり、新しいリクエストごとに要素を追加していますリスト。テスト目的で、メソッドが機能しているかどうかを確認するためにすべてを応答に書き込んでいますが、リストにユーザーが何人いても、2 つの値しか返されません。

これが私のコードのサンプルです。ユーザーのリストを文字列のリストに置き換えることで、コードをシンプルにしています。

public class SCCModule : IHttpModule
{
    private static List<string> _users = new List<string>();

    public void Init(HttpApplication context)
    {
        context.PreRequestHandlerExecute += OnPreRequestHandlerExecute;
    }
    public void Dispose()
    {

    }
    public void OnPreRequestHandlerExecute(Object source, EventArgs e)
    {
        HttpApplication app = (HttpApplication)source;
        HttpResponse response = app.Context.Response;
        HttpRequest request = app.Context.Request;

        _users.Add("A user from " + DateTime.Now + "</br>");

        foreach(var u in _users)
        {
            response.Write(u);
        }
    }
}

サンプルの index.html を Web サイトから読み込むと、次のようになります。

2012 年 10 月 18 日午後 3 時 37 分 33 秒のユーザー

2012 年 10 月 18 日午後 3 時 37 分 35 秒のユーザー

セットアップに関する情報: モジュールを追加した IIS7.5 を実行しています。これは、実行の優先度の順で最初です。web.config でデバッグを有効にしました。VisualStudio はデバッグ構成をビルドするように設定されており、DLL を Web サイトの bin フォルダーに直接コピーするビルド後のイベントがあります。デバッグするために、w3wp.exe プロセスに接続しています。

興味深い事実: デバッグ時。index.html ページで更新を押した最初の 2 回でブレークポイントがトリガーされ、その後はトリガーされません。入力する新しい URI は、ブレークポイントに 2 回しかヒットしません。

では、10 回更新できるのに、結果が 2 つしか表示されないのはなぜですか?

フィドラーの結果: ここに画像の説明を入力

4

3 に答える 3

1

問題は IIS 自体にありました。出力キャッシュが有効になっているため、クライアントが新しいページを要求していても、サーバーは新しいページを送信していませんでした。

この問題を解決するには、Output Caching -> Edit Feature Settings... -> Enable Cache と Enable Kernel cache の両方のチェックを外しました。

于 2012-10-18T20:33:57.830 に答える
1

ブラウザは、html、画像、css などのリソースをキャッシュしています。

ブラウザーがそれらをキャッシュすると、IE で Ctrl+F5 をクリックしない限り、再度要求されることはありません。

Request.Path を使用してリクエストを表示できます。

HttpRequest request = app.Context.Request;
_users.Add("A user from " + DateTime.Now + " - " + 
    app.Context.Request.Path + "</br>");
于 2012-10-18T20:17:57.700 に答える
0

これを試して。

<location path="data">
  <system.webServer>
    <staticContent>
        <clientCache cacheControlMode="NoControl" />
    </staticContent>
    <caching enabled="false" enableKernelCache="false" />
  </system.webServer>
</location>
于 2015-02-25T00:29:19.053 に答える