Web サイトにアクセスしてログインし、いくつかのタスクを自動的に実行するクライアントを作成していますが、最近、Cookie を更新して (何らかの理由で...) 識別 Cookie 内にコンマを含めました。
たとえば、Cookie の値は次のようになります。
a,bcdefghijklmnop
問題は、msdnによると、Cookie の値にコンマもピリオドも使用できないことです。私が探しているのは、この制限を回避する方法、.net の Cookie をカンマで適切に機能させる方法です。サーバーが「SET-COOKIE」ヘッダーをクライアントに送信することがわかりました。それが解析されていると推測していますが、それは明らかにコマンドとセミコロンにも特別な意味を与えているようです (したがって、 .NET 自体内のクラス)。
しかし、IE、FirefoxなどのブラウザはどのようにCookieを適切に処理しますか(ウェブサイトは私がテストしたすべてのブラウザで正常に動作するため、明らかにそうです)これを強制する方法はありますか? .NET での動作?
どんな助けでも感謝します、ありがとう。
- - 編集 - -
いくつかの追加情報:
私のコードは次のようになります。
request = (HttpWebRequest)WebRequest.Create(URI);
request.CookieContainer = Program.client.cookieJar;
cookieJar は Program.client で次のように定義されています。
CookieContainer cookieJar = new CookieContainer();
CookieContainer 内のすべての Cookie をループして出力すると、次のような結果が得られます: (Cookie、形式: "name" -> "value")
"normal_cookie" -> "i am the value"
"messedup_cookie" -> "a"
"bcdefghijklmnop" -> ""
// What I should get is this:
"normal_cookie" -> "i am the value"
"messedup_cookie" -> "a,bcdefghijklmnop"
問題の核心は、コンマとセミコロンが SET-COOKIE ヘッダー文字列の予約文字であるように思われます...しかし、ブラウザはこれをどのように処理するのでしょうか? おそらく自分で文字列を解析できますが、次のような状況を回避する方法がわかりません:(HTTPヘッダー、形式:「名前」->「値」)
"Set-Cookie" -> "messedup_cookie=a,bcdefghijklmnop; path=/; domain=.domain.com; expires=Sat, 15-Aug-2009 09:14:24 GMT,anothervariable=i am the value;"
ご覧のとおり、expires セクションは次の変数と区別するためにセミコロンの代わりにカンマを探します。私が知る限り、それは次の形式です。
cookie1_var1=value; cookie1_var2=value,cookie2_var1=value; cookir2_var2=value
しかし、それが本当なら、値の 1 つの中で発生する可能性のあるコンマを処理するエレガントな方法はありますか?