Shaw's Home Page(本館)

はてなダイアリーから引っ越しました。

Facebookアプリ内でcookieを使う際の注意点

Facebookアプリを作っていて、iframe内でcookieを使うケースもあると思います。例えば、Facebookアプリ内でページ遷移が発生する場合、Facebookから発行されたアクセストークンをセッションで管理することが多いと思うんだけど、その際セッションIDは通常cookieで持つはずですよね。

で、セッションIDをcookieで保持する前提で、Facebookアプリでセッションを利用すると、Firefoxchromeでは問題にならないんだけど、IEだとそのセッションが有効になってくれない問題が発生。おかしいなぁ…と思って調査していると、IE固有の問題(仕様というべき?)として、iframe内が親と違うドメインの場合クロスドメインになるため、デフォルトのセキュリティ設定だとサードパーティcookieが無効になる、という設定に起因していることがわかった。Facebookアプリを作る場合は、もろに上記のような構成になるので、IEの場合だとiframe内でセッションIDをcookieで持てないため、当然セッションの復元も行うことが出来ません。

じゃぁどうするか。IEcookie設定でセキュリティレベルを下げるって方法もあるけど、一般向けに公開するアプリでそんな手は使えません。そこでP3Pの出番です。

IEでiframe内の別ドメインのCookieを有効にする方法
に書かれている内容がドンピシャですね。IEは、サードパーティcookieを強制的に有効にするために、P3Pというポリシーが用意されているので、これを使いましょうという話です。

IEのiframe内で発生するこの挙動の件は過去にも何度かはまったことがあって、都度P3Pを使うことで解決してきたはずなんだけど、時間が経つと忘れがちなんだよな。比較的最近、iframe内でTwitterの認証ページを呼びだそうとして、IEだけうまくいかなったのもこれが原因だった気もするな…。近いうちにもう一度検証してみよう。