unoh.github.com

携帯とCookieドメイン

Wed Oct 08 07:55:16 -0700 2008

こんばんわ五十川です。

しばらく前になりますが、ソーシャルスクラップブックclippのモバイル版をリリースしました。cippモバイルではドコモ以外は、セッション管理にCookie(のみ)を利用することにしたのですが、そのときCookieドメインではまりました、というお話。

PC向けclippのドメイン名は、トップページなどのユーザ共通ページは「clipp.in」、ユーザ個別のページは「{username}.clipp.in」(例えばclipp-info.clipp.in)となっています。ケータイサイトをマルチなサブドメインにする例はあまり多くないと思いますが、clippモバイルでは、ルーティング直すのめんどくさいという怠け者な理由で、PC版のドメイン名がそのまま使えればいいなと思って取り掛かりました。しかし、その目論見はあっさりと破綻することになるのでした。

まずはau/EZweb

EZwebのCookieドメインには以下のようなルールがあるようです。

後者のルールに従えば「{username}.clipp.in」に合致するCookieドメインは「.clipp.in」でなければなりませんが、「.clipp.in」は「clipp.in」には後方一致しません。

そこで、モバイル版のユーザ共通ページのドメインは「m.clipp.in」に変更しようと考えました。

続いてソフトバンクモバイル

さてしかし、これではソフトバンクモバイルでうまくいきません。「clipp.in」というドメイン名は「クリッピン(グ)」から採ったものですが、ソフトバンクモバイルのCookieドメインには以下のようなルールがあるようで、「clipp.in」のトップレベルドメイン「.IN」がこの制約を受けます。

これはNetscapeのCookie仕様でお馴染みのハナシで、実際のところ属性ドメインを含む(かもしれない)ccTLDなどの扱いはウェブブラウザの実装によって差異がありますが、ソフトバンクモバイルでは、「.IN」は3ヶ以上のドットが必要なドメインとなるようです。つまりドメインに「.clipp.in」を指定したCookieは無効で、有効なCookieであるためにはドメインを「.{なんとか}.clipp.in」という形式にしなければならないようなのです。

しかし、Cookieドメインを例えば「.m.clipp.in」に変更すると、当然「{username}.clipp.in」には合致しません。そこで、ユーザ個別ページのドメイン名も「{username}.m.clipp.in」に変更しようと考えました。

再びau/EZweb

しかし、Cookieドメインを「.m.clipp.in」とすると、ユーザ共通ページのドメイン名「m.clipp.in」が、前述のEZwebの後方一致ルールでNGなので、EZwebではCookieドメインを「.clipp.in」、ソフトバンクでは「.m.clipp.in」と分ければいいかと考えました。

さてしかし、これでもやっぱりうまくいきません。EZwebは「{username}.m.clipp.in」に対して、ドメインに「.clipp.in」を指定したCookieを返してくれません。これはどうやら:

というルールのようです。RFC 2109の4.3.2にあるA Set-Cookie from request-host y.x.foo.com for Domain=.foo.com would be rejected, because H is y.x and contains a dotですね。ちなみにソフトバンクモバイルは、このパターンはOKのようです。

ということで結局

以上のような試行錯誤を繰り返した挙句にclippモバイルはリリースされました。結局どうしたか、ご興味のあるかたは実際にclippモバイルにアクセスしてお確かめください(笑)。

本日のまとめ

ではでは。