2012年11月20日火曜日

cookieがセットされない

最近cookieに悩まされたので。

var webReq = (HttpWebRequest)WebRequest.Create("http://www.aaa.co.jp");
var webRes = (HttpWebResponse)webReq.GetResponse();

という形で、レスポンスを取得するのはよくあるのだが
レスポンスが正しくセットされないことがたまにある。

原因として、以下の2点があるようである。
1.cookieのvalue にカンマが含まれている
例)HttpHeaderの一部
Set-Cookie : cookieA=a,b,c,d,e
<レスポンスにセットされるcookie>
・cookieA = a
※b,c,d,eが読み捨てられる。
   bとcとdとeというcookieが存在すると解析されている?

2.cookieのvalue にカンマが連続で含まれる
例)HttpHeaderの一部
Set-Cookie : cookieA=a,b,c,d,e
Set-Cookie : cookieB=a,,,c,d,e
Set-Cookie : cookieC=CCC
<レスポンスにセットされるcookie>
・cookieA = a
・cookieB = a
※cookieC自体がセットされない。

少なくともこのような傾向がある。
解決方法としては、レスポンス取得後、HttpHeaderからcookieを取得して
正規表現でどうにかして、cookieとその値を確実に取得して
レスポンスのcookieに書き込んであげるしかない。
その辺りは、サイトによると思うので、割愛。

cookieにカンマが含まれていると危険だ。
でもcookieの値にカンマが含まれているサイトって多いのか疑問である。。。