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

编制新的 MSDN 目录(From MSDN)

 Zee注:虽然不是很复杂,也算是个XML的应用吧。  :)Bryn Waibel 和 John Boylan 2000年7月10日 MSDN Library 是 MSDN 的信息中心库,包括超过 2...
  • ghj1976
  • ghj1976
  • 2001-06-15 11:55:00
  • 1499

关于在frame里session丢失的说明

  后台使用frame管理很多站点下链接,点击第一个页面session都是正常写入读取,换到其他页面,session变成null,测试的时候使用的是 firefox,没发现任何问题,发布出去后由于使用...
  • xiaoyu9805119
  • xiaoyu9805119
  • 2007-10-15 15:28:00
  • 358

解决iframe,frame和框架丢失或获取不到session,cookies问题

解决iframe,frame和框架丢失或获取不到session,cookies问题 引用地址: Response.clear() Response.CacheControl = "no...
  • Ray_Adon
  • Ray_Adon
  • 2011-11-11 17:37:48
  • 8639

使用frame注意session陷阱

最初发现特定情况下使用frame会导致生成多个session是很久以前的事了,今天突然想起来觉得有必要做个总结,毕竟这种情况还是比较隐蔽的,那么什么时候使用frame会产生多个session呢,产生多...
  • sunyujia
  • sunyujia
  • 2008-06-21 22:29:00
  • 6235

关于在Frame中Session丢失的一种解释?

大家好!今天我在做一个Frame中,发现Session传不到右边的页面上去,怎么搞都是null,没有办法只好用了页面传值的办法,在后台注册此链接的NavigateUrl="/BSDFJ.aspx?id...
  • littlehb
  • littlehb
  • 2007-03-14 17:19:00
  • 1784

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

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

各语言框架嵌套session丢失问题解决

P3P,不算是新名词,但还是有些人不清楚。事实上我也不清楚。。。在百度上看到有这玩意就备份下来。说真的,我只是知道用,但不知道为什么用。额。。很明显,因为在ucenter同步的时候,在discuz的u...
  • sd37894663
  • sd37894663
  • 2011-02-15 14:54:00
  • 202

Frame中关于Session丢失的解决方法!

在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集成,应用到多域的情况下,而Iframe是不能保存Session的。因此,网上可以找到很多相关的文章,如果网站可以采用设置Web....
  • wangandy7811
  • wangandy7811
  • 2007-07-20 11:35:00
  • 591

Frameset导致Cookies和Session丢失的原因及解决办法

 使用框架(Frameset)调用不同域名下的页面,会出现此域下页面的Cookies和Session丢失的现象。原因:基于IE6.0对W3C 关于cookie的P3P协议的支持,使用框架调用不同域下的...
  • zl_c
  • zl_c
  • 2007-08-14 15:38:00
  • 3144

Frame中关于Session丢失的解决方法!

转自:http://www.cnblogs.com/tintown/archive/2007/06/04/770678.html在开发中,我们经常会遇到使用Frame来工作,而且有时是为了跟其他网站集...
  • wangrumeng
  • wangrumeng
  • 2007-08-21 11:46:00
  • 787
收藏助手
不良信息举报
您举报文章:Frame中Session丢失的解决方法
举报原因:
原因补充:

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