IFrame中Session丢失的解决办法

转载 2007年09月21日 14:27:00
 在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的。因此,网上可以找到很多相关的文章,如果网站可以采用设置Web.Config中的配置:<sessionState
mode="StateServer"
stateConnectionString="tcpip=127.0.0.1:42424"
sqlConnectionString="data source=127.0.0.1;Trusted_Connection=yes"
cookieless="false"
timeout="40"
/>
把cookieless="false"改成"true"就可以了。但也同样有个小问题,就是如果页面中采用Javascript的window.location.href=''这样的方式来重定向的话,系统会认为这是另一个新的请求,产生一个新的SessionId,导致原Session同样的丢失。所以对于重定向,还是使用Response.Redirect()为好。

除了Ifrmae有丢Session问题外,frameset也有同样的问题。Frameset的问题更不移定,是有时会丢,有时不会丢,这更认人头痛,在网上找到了一个方法,在页面page_onload里添加一语句:
Response.AddHeader("P3P","CP=CAO PSA OUR");
FrameSet中的Session丢失问题就解决了。至于里面具体的原因 也没时间去搞懂了。

-----------------------------------------------------------------------------------------------------------------------------------------------

在实际操作中,以上设置将导致对方post过来的数据我方接收不到的问题,正确的解决方法应该是:

http://www.cnblogs.com/suxvsheng/archive/2007/08/17/860157.html

IE框架中访问不同域的网页不能带入COOKIE————是IE浏览器的一个BUG?
偶然中发现一个IE浏览器的问题:
站点aa.com的页面a.aspx中存在一个iframe,iframe的src为站点bb.com的b.aspx。b.aspx设置了一个COOKIE(不管临时保存还是长期保存),然后刷新aa.com/a.aspx,bb.com/b.aspx也会被刷新,这时候会发现第二次向bb.com/b.aspx的请求里面并没有带入第一次设置的COOKIE。
更确切地说:IE浏览器丢掉了框架中不同域的COOKIE。

查看浏览器的隐私选项,默认是“中”。现在把隐私的等级修改成“低”,再次做上面的测试,然后发现框架中的COOKIE可以被带入了。
从这个现象来看,应该是IE出于安全考虑而做了限制。但是!!!处于不同的两个域的的页面,应该被看成打开了两个互不相关的浏览器窗口,大家各自设置自己的COOKIE,各自带入到下次请求中,只要互不影响,不应该受到限制。
恩,那么,为什么要限制呢?看来还是微软的程序员对自己浏览器的安全没什么信心,担心同一浏览器窗口不同域的情况下,黑客仍可能获取另一域的COOKIE,所以干脆把其中一个域的COOKIE干掉!!!人家FireFox为什么就没这种限制?

===========================================================================


问题根源:

IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox目前还不支持P3P安全特性,firefox中自然也不存在此问题了。Mircosoft对此的具体描述可以参见 Privacy in Internet Explorer 6

解决方法:

很简单,在要嵌入的内容中(iframe指向的站点)输出P3P的主机头声明,步骤如下(Session variables are lost if you use FRAMESET in Internet Explorer 6):

1.打开IIS管理器 inetmgr
2.选择被嵌入iframe源站点或者目录,右键点击打开属性框
3.切换到HTTP头
4.添加
5.自定义HTTP头名: P3P
6.自定义HTTP头值: CP="CAO PSA OUR"
7.关闭属性框退出,即刻生效
至于上面CAO PSA OUR的具体意思,还是请参考前面的文章:Privacy in Internet Explorer 6

至此,iframe框架下session丢失的问题才彻底解决。

IE下iframe跨域session和cookie失效问题的解决方案

问题来源: 何为跨域跨域session/cookie? 也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesio...
  • z69183787
  • z69183787
  • 2014年09月05日 21:12
  • 4486

iframe 跨域访问session/cookie丢失问题解决方法

解决iframe跨域访问cookies/session丢失问题,兼容IE,safari浏览器。
  • fdipzone
  • fdipzone
  • 2015年01月27日 23:17
  • 34452

IFrame中Session丢失的解决办法

在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的。因此,网上可以找到很多相关的文章,如果网站可以采用设置Web....
  • jackiehome
  • jackiehome
  • 2013年10月29日 16:16
  • 1234

IFrame中Session丢失的解决办法

N层IFrame 框架集 单独测试都是没有问题的,结果再次嵌套问题就来了,登录以后,碰到每个页面检查登录时,SESSION就丢掉了,百思不得其解。百度一下,找到解决方案: 在开发中,我们经常会遇到...
  • joliny
  • joliny
  • 2012年03月13日 12:07
  • 1064

iframe跨域与session失效问题的解决办法

何为跨域跨域session/cookie? 也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, ...
  • happyqwz
  • happyqwz
  • 2017年02月14日 16:01
  • 171

Session丢失的原因及解决办法

  • 2016年03月08日 14:15
  • 53KB
  • 下载

Session容易丢失的一些常见解决办法

在以前的项目中经常遇到Session容易丢失的问题,郁闷,经过网上搜索,还是有解决方法的。     默认配置情况下,Web.Config文件中关于Session的设定如下:     Trust...
  • taomanman
  • taomanman
  • 2011年11月25日 22:24
  • 3730

asp.net使用session丢失问题的解决办法

asp.net使用session丢失问题的解决办法,我们在用asp.net开发程序的时候经常会遇到Session很不稳定,老是数据丢失。下面就是Session数据丢失的解决办法希望对您有好处。1、在W...
  • shinehouse
  • shinehouse
  • 2011年01月20日 09:10
  • 258

Session丢失的解决办法小结

最近在做ASP.NET项目时,测试网站老是取不出Session中的值,在网上搜索了一下,找到一些解决方法,记录在这里。最后使用存储在StateServer中的办法解决了问题 SessionState...
  • u011529422
  • u011529422
  • 2013年10月05日 09:40
  • 516

Asp.net 默认配置下,Session莫名丢失的原因及解决办法

Asp.net 默认配置下,Session莫名丢失的原因及解决办法 正常操作情况下Session会无故丢失。因为程序是在不停的被操作,排除Session超时的可能。另外,Session超时时间被设定...
  • ranbolwb
  • ranbolwb
  • 2012年02月19日 23:34
  • 485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:IFrame中Session丢失的解决办法
举报原因:
原因补充:

(最多只允许输入30个字)