[Facebook][ASP.NET] 使用 IE 瀏覽 Facebook 頁籤應用程式時遺失 Session 的解法 – 使用 P3P Header

Standard

其實這個問題在用 PHP 撰寫 Facebook 頁籤應用程式時就遇過,最近在用 ASP.NET 時又遇上了。
測試時使用 Internet Explorer 瀏覽,過程中有使用到 Session,但在送出表單後到下一頁面時 Session 卻遺失了。

 

這是因為 IE 的隱私設定預設會阻擋 iframe 跨域網站的 Cookie,而 ASP.NET 的 Session 需使用 Cookie,因此導致 Session 失效。

解決方法有二,一是請使用者調整瀏覽器隱私設定,但實際案例中不大可能要求每個使用者一一調整。
因此第二條路是,需在程式端下 P3P Header 來告知瀏覽器我們的隱私規範。
※關於 P3P 的相關說明相當複雜,請自行上網 Google 囉。

 

ASP.NET 中可以建立一 Global.asax,加入以下內容:

[code language=”csharp”]
protected void Application_BeginRequest(Object sender, EventArgs e)
{
HttpContext.Current.Response.AddHeader("p3p", "CP=\"CAO PSA OUR\"");
}
[/code]

 

參考資料:
使用P3P Header解決跨網域IFrame Session遺失問題 – 黑暗執行緒
iframe Applications and P3P HTTP Headers – Facebook 開發者論壇
如果您在 Internet Explorer 6 中使用 FRAMESET 將會遺失工作階段變數 – Microsoft 技術支援

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *