こんばんわ五十川です。
しばらく前になりますが、ソーシャルスクラップブックclippのモバイル版をリリースしました。cippモバイルではドコモ以外は、セッション管理にCookie(のみ)を利用することにしたのですが、そのときCookieドメインではまりました、というお話。
PC向けclippのドメイン名は、トップページなどのユーザ共通ページは「clipp.in」、ユーザ個別のページは「{username}.clipp.in」(例えばclipp-info.clipp.in)となっています。ケータイサイトをマルチなサブドメインにする例はあまり多くないと思いますが、clippモバイルでは、ルーティング直すのめんどくさいという怠け者な理由で、PC版のドメイン名がそのまま使えればいいなと思って取り掛かりました。しかし、その目論見はあっさりと破綻することになるのでした。
- 以下の内容は手元の数多くない端末で確認しただけのもので、各キャリアのサイトに掲載されているドキュメントにはこのあたりの話題は見当たらないようです(あったらごめんなさい)。なので間違ってたりヌけてたりする可能性はたぶんにあります。もしこのあたりの話題をご存知のかたがいらっしゃいましたら、ご教示いただければ幸いです。
- 以下はCookieに関する話題のうちドメインについてのみです。ケータイサイトでのCookieについては、この他にもいろいろな制約がありますが、ググればいろいろ出てきますので、そのへんはそちらをご参照ください。
まずはau/EZweb
EZwebのCookieドメインには以下のようなルールがあるようです。
- ドメイン名の評価は後方一致
- ホスト名を省略した指定では先頭にドットが必要
後者のルールに従えば「{username}.clipp.in」に合致するCookieドメインは「.clipp.in」でなければなりませんが、「.clipp.in」は「clipp.in」には後方一致しません。
そこで、モバイル版のユーザ共通ページのドメインは「m.clipp.in」に変更しようと考えました。
続いてソフトバンクモバイル
さてしかし、これではソフトバンクモバイルでうまくいきません。「clipp.in」というドメイン名は「クリッピン(グ)」から採ったものですが、ソフトバンクモバイルのCookieドメインには以下のようなルールがあるようで、「clipp.in」のトップレベルドメイン「.IN」がこの制約を受けます。
- gTLD、及び他のいくつかのトップレベルドメイン(.JPのみ?)では2ヶ以上、その他は3ヶ以上のドットが必要
これは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モバイルにアクセスしてお確かめください(笑)。
本日のまとめ
- ケータイサイトでマルチサブドメインは止めとくが吉
- もしやらなければならないのならgTLDまたは.JPなドメイン名で
ではでは。