問題描述
最近出於興趣, 開發人人網的一款小應用, 應用頁面通過 iframe 嵌在人人網頁面中, 打開應用后需要用戶授權, 人人網將返回的授權數據通過GET方法請求我的后台代碼, 后台代碼分析其中比較重要的幾個參數存儲在Session中, 可是在IE中怎么試都跟沒設置Session似的, 而用Chrome則完全正常. 我用Fiddler調試了很久, 跟哥哥也討論了幾個方法, 但一開始我一直以為是URL中含有'-'符號所致, 使用各種Encode, 還嘗試着將Response.Redirect 改為Server.Transfer, 但都無效, 這個問題困擾我好幾天.
通過網上大量的搜索發現原來IE的iframe有特殊之處, 默認情況下, IE如果發現iframe的域和父頁面的域不同, 則會禁止iframe頁面寫入Cookie(Session在默認情況下就是通過Cookie保存一個SessionID的). 如果將IE設置->隱私的級別調至最低, 也就是接受任何Cookie, 那么是運行正常的.
解決辦法
在IIS的 HTTP Response Headers 中添加一行, 名字為: p3p, 值設置為: CP="IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"
參考
1. http://stackoverflow.com/questions/6368750/session-variables-not-saved-when-page-is-in-an-iframe
2. http://aspnetresources.com/blog/frames_webforms_and_rejected_cookies