现在的位置: 首页 > 综合 > 正文

Frameset中引入的第三方asp.net页面丢session的问题

2013年03月11日 ⁄ 综合 ⁄ 共 853字 ⁄ 字号 评论关闭

公司有一个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

抱歉!评论已关闭.