Frame中Session丢失的解决方法

原创 2007年10月15日 16:38: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过来的数据我方接收不到的问题,正确的解决方法应该是:

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丢失的问题才彻底解决。

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

今天因工作需要,在一个域名A的页面中,使用iframe包含另一个域名B的页面。在chrome,firefox测试一切正常。 当测试到IE7时,发现域名B中的页面session失效,不能写入sessio...
  • qq_36663951
  • qq_36663951
  • 2017年12月07日 09:41
  • 125

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

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

session丢失解决方法

最近在做ASP.NET项目时,测试网站老是取不出Session中的值,在网上搜索了一下,找到一些解决方法,记录在这里。最后使用存储在StateServer中的办法解决了问题。 Sessi...
  • wanglei_samrtfish
  • wanglei_samrtfish
  • 2014年03月12日 11:51
  • 715

asp.net session丢失的解决方法

ASP.NET Session丢失原因: 由于Asp.net程序是默认配置,所以Web.Config文件中关于Session的设定如下: 我们会发现sessionState标签中有个属...
  • zunguitiancheng
  • zunguitiancheng
  • 2013年06月07日 03:09
  • 309

http连续请求中Session丢失问题解决方案汇总

http连续请求中Session丢失问题解决方案汇总
  • u010991499
  • u010991499
  • 2016年03月14日 18:28
  • 3368

java web用户频繁非正常登出系统(session丢失)的原因分析及解决思路

项目开发完成以后,部署电信服务器中测试时,发现登录的用户不时会出现自动登出回登录页的情况,而且出现的频率不等。分析原因如下。       首先考虑session失效,我在工程中设置session...
  • dinghaoseu
  • dinghaoseu
  • 2016年01月11日 21:05
  • 4648

关于CI框架session伪丢失的探索

笔者最近有个页面,鼠标悬浮图片,发送ajax
  • u011150448
  • u011150448
  • 2014年05月28日 13:54
  • 826

前端页面跳转session丢失问题

最近自己在搞后端采用分布式多台服务器部署,然后前后端分离的开发方式,页面在使用window.location.href 跳转方式或者其它前端的跳转方式的时候,再向后端应用服务器请求Cookie ses...
  • u011687186
  • u011687186
  • 2017年04月14日 17:20
  • 2623

springmvc session丢失 重新登录

参考 http://zhengjunxiang.iteye.com/blog/1990689 具体做法 由于本人目前开发的项目,几乎所有的页面显示都是基于ajax请求,所以,不让系统变复杂,取...
  • u014698430
  • u014698430
  • 2017年05月26日 21:24
  • 237

解决php项目中session失效的方法

今天下班坐班车,快到站的时候,上家公司的leader发了个qq给我,意思是救火,下车后回来在电脑上详细问了下,leader的描述如下 这个地址 你帮我看下 为啥上传完试卷发布任务 设置答题卡的时...
  • molaifeng
  • molaifeng
  • 2015年01月15日 22:49
  • 18750
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Frame中Session丢失的解决方法
举报原因:
原因补充:

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