FacebookアプリでIEでのみセッションが使えない
結論から言うと
IEは、デフォルトではセキュリティの観点からクロスドメインによるCookie操作を拒否する
というのが原因だったみたいです。
参考: IE iframeを用いてクロスドメインするとcookieが動かない? | ブロードヒューマンネットワーク社員ブログ
どういう事かと言うと、Facebookアプリは、Facebookのページの中にiframeでアプリのページを読み込んで動作しています。
そして、IEではデフォルトではクロスドメインによるCookie操作ができないようになっているので、セッションが使ないという状態になるようです。
web系のプログラムを書いている人なら当たり前の事なのかもしれませんが、知りませんでした。
対策
サーバからのレスポンス時にHTTPヘッダに
P3P: CP='UNI CUR OUR'
を付加します。こうすることで、このアプリのポリシーをブラウザに明示的に伝えることができます。
Ruby on Railsでの記述方法を紹介します。
application_controller.rbのApplicationControllerクラス内に以下のような記述を追加します。
before_filter :p3p def p3p response.headers["P3P"] = 'CP="UNI CUR OUR"' end
こうすることで、全てのコントローラでレスポンスのヘッダに上記の宣言を追加することができます。