3流プログラマのメモ書き

元開発職→社内SE→派遣で営業支援→開発戻り浦島太郎状態の三流プログラマのIT技術メモ書き。 このメモが忘れっぽい自分とググってきた技術者の役に立ってくれれば幸いです。

(PHP,IE)インラインフレームで別ドメインのPHP読み込むとセッションが効かない

インラインフレームを使ったWEBサイトを作っています。

このサイトは www.hoge.jp とします。

フレーム内のコンテンツは、www.piyo.com の PHP ファイルです。

この時、フレーム内のPHPでセッション管理しようとしてもできません。

www.piyo.com/login_input.php から www.piyo.com/login_chk.php に遷移してもセッション情報が引き継がれないのです。

これは、IE6以降で現象が発生しました。FirefoxChromeでは問題なく動きます。

この時、セッション管理はCookieを使ってました。

IE6以降ではこのようなクロスドメイン環境の場合、プライバシー保護のために別ドメイン(サードパーティ)のクッキーは受け入れないようです。

クライアント側のIEのプライバシー設定で、サードパーティ製のクッキーを受け入れるようにすればいいのですが、サイト管理者からはそんなことは言えません。

対策として、PHPでセッション開始したりクッキーを使う前に以下のコードを書けばいいようです。

header("P3P: CP='UNI CUR OUR'");

IEP3Pに準拠してるようで、P3Pというのはプライバシーポリシーを記述する標準フォーマットらしく、上記のコードを書くことでそれに準拠してるよ みたいなことを宣言するようです。

ちなみに、セッションをCookieに持たすのではなくURLに持たすことでも動きますが、やはりセキュリティ上好ましくないでしょう。

参考:

IEでクロスドメインのiframe内のcookieが取れない/WEBサイト作成の注意点 サイト構築日記

PHP:IE6でサードパーティのクッキーを受け入れるようにする:P3P

サードパーディーのCookie | shinodogg.com

IE 6のプライバシ管理機能 - @IT