読者です 読者をやめる 読者になる 読者になる

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

こうすることで、全てのコントローラでレスポンスのヘッダに上記の宣言を追加することができます。