サードパーティークッキーを使ったセッションの維持について
異なるドメイン間でセッションのやり取りをしたい。
cookieの仕様で別ドメインのサーバーにはcookie(セッションID)が送信されない。つまり、ユーザーを特定できない。URLにSIDを埋め込む方法はあるが、これはこれでいろいろと問題がありそう。
そこでサードパーティークッキーを利用することになる。
理解したことのメモ
サードパーティークッキーもJSONPもクロスドメインに関するという点では同じだけど、別物なのでごっちゃにしないこと。
サードパーティークッキーは別ドメインが発行したcookieのこと。
JSONPはajaxを使って別ドメインのデータを取得するための技術(サーバー側の設定が必要)のこと。
safariのデフォルトだとサードパーティークッキーを書き込むことができない。
(chrome、firefox、IE11ではimgタグ、iframeタグにて書き込めることを確認済み)
IE10以下もデフォだと書き込めないぽいけどP3Pヘッダーで対応できるはず(未確認)
PHP+JavaScriptでクロスオリジンなシングルサインオン認証 - Qiita
このページにもあるけど、safariを無視すれば一番下のiframeやらimgタグでcookieをセットするクロスサイトのページにアクセスすればcookieはセットされる。そうやってセッションIDをドメイン間で統一することができればセッションの維持はできるわけで。
一個注意しないといけないのが、ドメインが一緒でもサーバーが違っているとセッションの保存先が違うためセッションの維持はできない。その場合はファイルではなく共通にアクセス可能なDBとかにセッションデータを保存することが前提になると思う。
safariでサードパーティークッキーを書き込む方法(ブラウザの設定以外で)について
クロスドメインでcookie書き込む方法 +クロスブラウザで - webネタ
このサイトの手順でいけるのかと思ったけど、現在は確認が出来なかった。
クロスドメインでのクッキー書き込み | IT Note
これも結局はiframeやimgタグのsrcでやっていることをjsonpを使ってやっているに過ぎない
そもそもサードパーティークッキーを拒否していたらどうしようもないので、やっぱり異なるドメイン間でのセッション維持は現実的でない、ということになるんじゃないかと思う。openIDとかに結局は行き着くのかもしれない。