Perl5のWWW::Mechanizeの挙動がなんか怪しかった。で、HTTP::Cookiesがどうも怪しそうだった。
送るべきCookieを送れてなかったりとか。
で、何が正しいのかわかんなくなってしまったので、Chromeと動作を比べた。
RFCとか見ればわかる事なんだろうけど、見てわかるような表がほしかった。文字読むの苦手なんだ。
確認方法
- Set-Cookieを受け取るためのアクセスを行う(「A」)
- Cookieを送るためのアクセスを行う(「B」)
- 「B」のときに送られたCookieの内容を確認する。(「A」でSet-Cookieした内容が送られたら○、そうでないなら×)
対象domain
- ryozi.net
- main.ryozi.net
- sub.ryozi.net
Set-Cookie時のdomainの値
- domain指定なし(none)
- domain=ryozi.net
- domain=.ryozi.net
- domain=main.ryozi.net
Chrome
「A」のドメイン | 「B」のドメイン | (none) | ryozi.net | .ryozi.net | main.ryozi.net |
ryozi.net | ryozi.net | ○ | ○ | ○ | × |
main.ryozi.net | × | ○ | ○ | × | |
sub.ryozi.net | × | ○ | ○ | × | |
main.ryozi.net | ryozi.net | × | ○ | ○ | × |
main.ryozi.net | ○ | ○ | ○ | ○ | |
sub.ryozi.net | × | ○ | ○ | × | |
sub.ryozi.net | ryozi.net | × | ○ | ○ | × |
main.ryozi.net | × | ○ | ○ | × | |
sub.ryozi.net | ○ | ○ | ○ | × |
WWW::Mechanize
「A」のドメイン | 「B」のドメイン | (none) | ryozi.net | .ryozi.net | main.ryozi.net |
ryozi.net | ryozi.net | ○ | ○ | ○ | × |
main.ryozi.net | ○ | ○ | ○ | × | |
sub.ryozi.net | ○ | ○ | ○ | × | |
main.ryozi.net | ryozi.net | × | × | × | × |
main.ryozi.net | ○ | ○ | ○ | ○ | |
sub.ryozi.net | × | ○ | ○ | × | |
sub.ryozi.net | ryozi.net | × | × | × | × |
main.ryozi.net | × | ○ | ○ | × | |
sub.ryozi.net | ○ | ○ | ○ | × |
確認時に使ったコード
https://gist.github.com/ryozi-tn/f2be9b397cf9b2402c352b27a21a75bb
後はクッキーの上書きを登録時のdomainとは異なるdomainからでも出来るのか、domain値が似てるようで違う(「.ryozi.net」と「ryozi.net」)場合も上書きできるかなども調べたほうがよさそうだけど、面倒になったので諦めてPhantomJSでやることにしました。
PhantomJSもこれはこれで辛い・・・