2

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

ただし、このモジュールを 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]
        }
    }
4

3 に答える 3

3

私は同様の問題に遭遇しましたが、別の解決策を持っていたので、誰かに役立つ場合に備えて共有したいと思いました. いくつかのツールを使用してリクエストとレスポンスのヘッダーを検査するという zengchun の提案も取り入れました。私は IE を使用しているので、F12 Dev Tools はこれに最適です。Cookie の応答ヘッダーを見るとすぐに、セキュア フラグが設定されていることに気付きました。案の定、SSL でホストされている実稼働サイトから SSL を使用しないテスト サイトにコードをコピーしたため、Cookie のセキュア フラグによってコードが読み取られなくなりました。web.config を更新して、requireSSL を httpcookies ノードから削除すると、サイトが機能し始めました。:)

于 2012-10-18T18:54:09.307 に答える
1

次のページをリクエストするクライアント側で問題が発生する可能性があります。firebug を firefox で使用するか、クライアント側のリクエストをログに記録し、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=/

サーバーが応答に Cookie を追加すると、応答は上記のようになります。

今、クック ドメインまたは Cookie パスの問題が異なると思います。

Cookie を設定する最良の方法は、次のコードのようなものです。

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

幸運を。

于 2012-03-29T07:26:44.130 に答える
0

zhengchun のおかげで、問題の根本にたどり着くことができました。静的ファイルへのリクエストを使用して Cookie を設定できなかったことがわかりました。Cookie の設定後に静的ファイルにリダイレクトされる最初の要求用に .aspx ファイルを作成しました。HttpModule は、.aspx ファイルに設定された後、Cookie を読み取ることができます。HttpModule の代わりに Cookie を設定するために .aspx ファイルが必要な理由はわかりませんが、これで修正されました。

于 2012-03-29T15:21:13.093 に答える