.net跨站frame网页嵌入Session丢失问题

来源:互联网 发布:屏保软件 编辑:程序博客网 时间:2024/05/29 12:08

在开发中,我们经常会遇到使用Frame来工作,将一个网站集成到另一个系统中,但Iframe中使用别站网页,由于IE框架中访问不同域的网页,不能带入COOKIE每次请求SessionID都不一样,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"就可以了。这样每个URL中都会加上此次请求的SessionID。此外,因为SessionID保存才URL中,使用window.location.href=重定向到话,Session也会丢失。不过可使用Response.Redirect()解决。

 

问题根源:

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.关闭属性框退出,即刻生效
原创粉丝点击