2012-03-28 9 views
2

Windows Server 2003を使用してIIS 6で作成したHttpModuleがあります。ブラウザにはCookieを送信できますが、次の要求ではCookieを読み取ることができません。ヌル。HttpModuleがIIS 6でCookieを受信して​​いない

IIS 7でもこのモジュールを実行するとうまくいきます。 IIS 7は切り替えられていないため、現在のところオプションではありません。これは、これが実現する前に完了する必要があります。

また、私は既にPostAcquireRequestStateフックの使用を試みました。

public void Init(HttpApplication httpApp) 
    { 
     httpApp.BeginRequest += OnBeginRequest; 
    } 

    public void OnBeginRequest(Object sender, EventArgs e) 
    { 
     var httpApp = (HttpApplication)sender; 
     var context = httpApp.Context; 

     const string cookieName = "sId"; 

     if (!string.IsNullOrEmpty(context.Request.QueryString["cookie"])) 
     { 
      var ck = new HttpCookie(cookieName) 
          { 
           Value = httpApp.Context.Request.QueryString["cookie"], 
           Expires = DateTime.Now.AddDays(1) 
          }; 

      httpApp.Response.Cookies.Add(ck); 
     } 
     else 
     { 
      var cookie = httpApp.Request.Cookies[cookieName] 
     } 
    } 

答えて

1

次page.youがあなたのクライアント側の要求をログに記録することができますFirefoxやfidderツールを使用して放火犯を使用して見ることができます要求する方法をクライアント側で発生することができるあなたのコードルックworked.the問題要求ヘッダーのcookd値をサーバーに送信するかどうかの要求。例えば

リクエストヘッダ:

get /1.aspx 
..... 
Cookie: sId=123 [if the client has a cookie then it will appear in here.] 

レスポンスヘッダ:

Set-Cookie: sId=123; expires=Fri, 30-Mar-2012 07:20:23 GMT; 
path=/ 

サーバが応答にクッキーを追加した場合、その応答は、それが上記のように見えるが。

今、私はあなたの調理ドメインまたはあなたのクッキーのパスの問題が異なると思います。

クッキーを設定するための最善の方法は、次のコードのようなものです:

var ck = new HttpCookie(cookieName) 
{ 
    Value = httpApp.Context.Request.QueryString["cookie"], 
    Expires = DateTime.Now.AddDays(1), 
    Path="/", 
    Domain="your domain" 
}; 

幸運。

+0

ありがとうございました。これは、私が静的なファイルリクエストに対してクッキーを送ることができなかった問題の本当の根に私を導いた。私のオリジナルのリクエストは、クッキーを設定するために.aspまたは.aspxファイルでなければなりません。そして、私のHttpModuleは必要に応じてクッキーを読むことができます。最初の情報が不足して申し訳ありませんが、私は実際にサーバーがcookieを読んでいると誓っていました。 – James

+0

あなたは歓迎です、なぜ私はあなたがIIS7で統合されたプールを使用するため、大丈夫ですIIS7を実行しているアプリケーションを悲しい知っている。 – zhengchun

0

zhengchunのおかげで、私は問題の根を見つけることができました。静的ファイルへのリクエストを使用してCookieを設定できなかったことが判明しました。私は、クッキーを設定した後、静的ファイルにリダイレクトされた私の最初の要求の.aspxファイルを作成しました。私のHttpModuleは、.aspxファイルに設定された後にCookieを読み取ることができました。なぜ、私はHttpModuleではなくクッキーを設定するために.aspxファイルが必要なのか分かりませんが、これを修正しました。

3

私は同様の問題に遭遇しましたが、別の解決方法がありましたので、誰かを助ける場合は分かち合うと思いました。私は要求の&応答ヘッダーを検査するいくつかのツールを使用するzengchunの提案を同様に取った。私はIEを使用しているので、F12開発ツールはこれに最適です。クッキーのレスポンスヘッダーを見たら、セキュアフラグが設定されていることがわかりました。確かに、SSLを使用していないテストサイトにコードをコピーして、コードを読み取れないようにしました。 web.configを更新してhttpSookieノードからrequireSSLを削除し、私のサイトが動作し始めました。 :)