2017-02-02 4 views
0

私はASP classic(ASPC)アプリケーションをASP.NET/C#(ASPX)で書き直しています。 ASPCでRequest.Cookiesが期待どおりに設定されていません

sSQL = "select..." & " where S = '" & Request.Cookies("K")("S") & "'" 

リクエストクッキーが設定され、レコードをDBから返される:変化の一つ 私が見つけ、設定アップRequest.Cookiesコレクションから値を使用してクエリにありました。

ASPXでは、要求Cookieが設定されず、クエリによってレコードが返されません。

オリジナルのロジックは、クエリ文字列からResponse.Cookiesに値を設定します。

if Request.QueryString("K") <> "" then 
     Response.Cookies("K")("S") = Request.QueryString("S") 
    end if 

私はRequest.Cookiesはどこにでも元ASPCコードで明示的に設定されていないことがわかります。この添加が必要だった理由を私は理解していない、

if Request.QueryString("K") <> "" then 
     Response.Cookies("K")("S") = Request.QueryString("S") 
     Request.Cookies("K")("S") = Request.QueryString("S") ' adding this fixes the issue, but its a kludge 
    end if 

しかし:今のところ

は、私の修正が要求クッキーを設定するステートメントを追加することでした。

Request.CookiesとResponse.Cookiesの値 がASPCとASPXによってどのように維持されているかに違いがあるようです。他に誰がこれを見たことがありますか? ASPCとASPXの違いは ですか?

これは、IIS7、IE11(およびFirefox)で、C#4.5、VS2015を使用して発生しています。

答えて

0

問題をより詳しく見てみると、問題が多価値Cookieでしかないことがわかりました。私はマルチバリューのクッキーを伝えることに問題があるようです。具体的なシナリオは、page1がpage2へのform-postを行い、page2がいくつかの作業を行い、page1にリダイレクトすることです。 Cookieがページ2で初期化されていないことがわかりました。

シンプルなクッキーでは問題は発生しませんでした。私はシンプルなクッキーに多値クッキーを変更することで、これを解決:

Response.Cookies["Key"].Values["SubKey"] 
to 
Response.Cookies["Key-SubKey"].Value 

を私の場合は、多値クッキーの使用はかなり任意のように見えました。 (時には、誰かがなぜコードを継承したのか、誰が何をしたのかを伝えるのは難しい)この変更は、同じことをリファクタリング - 多分簡単化することとはちょうど異なる方法です。

その他の解決策は、コードを修正することで可能です。 ASPXのマルチバリュー・クッキーが、なぜその価値が失われたのかを理解する根本的な前提については興味があります。

関連する問題