Frameset中引入的第三方asp.net頁面丟session的問題


公司有一個asp.net開發的用於展現報表的web系統, 一個合作伙伴想通過框架將展現報表的頁面嵌入到他們自己的portal頁面裏(一個jsp頁),
嵌入以後發現展現報表的asp.net頁面第一次登陸後可以正常顯示,刷新或打開其他頁面後出錯誤,跟蹤發現是session丟失的緣故, 網上查了些資料, 發現是由於frame中嵌入第三方web頁後, 不能保存cookie導致的session丟失.
    在frameset裏面,也就是裏面的frame是來自第三方站點(不同IP或不同域名),那麼默認情況下IE會自動禁用這些站點的cookie,也就是在請求某url時在HTTP header裏不發送它們的cookie,包括session的cookie。注意,這些站點在response裏面設置的cookie還是會被髮送到瀏覽器的.默認情況下asp.net頁面是通過一個名稱爲sessionid的cookie來標識一個用戶的, cookie丟了,當然對應的session也就丟失了.
    原因找到了,解決問題的方法就簡單了:
    方法1: 再要嵌入的第三方的web頁的head節添加 P3P: CP="CAO PSA OUR", 這種方法適合嵌入少量頁面而且頁面間沒有相互關聯時使用.
    方法2: 直接修改第三方的iis, 在http頭中添加自定義頭信息:
               自定義http頭名: P3P  自定義http頭值: CP="CAO PSA OUR"
           這種方法適合於嵌入多個web頁面
 
加入http頭P3P: CP="CAO PSA OUR"以後, 就會告訴做爲容器的ie瀏覽器,保存來自第三方web site的cookie, cookie不丟了, session也就不丟了.
   

參考:
Session variables are lost if you use FRAMESET in Internet Explorer 6
http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章