`

IFrame中Session丢失的解决办法

 
阅读更多

 在开发中,我们经常会遇到使用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丢失的问题才彻底解决。 

分享到:
评论

相关推荐

    iframe跨域访问时session丢失

    NULL 博文链接:https://thoreau.iteye.com/blog/745100

    PHP关于IE下的iframe跨域导致session丢失问题解决方法

    其他参考文章中提到了一个类似的问题,即在Java环境下,由于jsessionid无法在iframe中正确传递,导致Session丢失。解决办法同样是确保正确设置Cookie策略,使得Session能够在不同的页面间正确传递。 总的来说,针对...

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

    通过这种方式,可以解决在IE浏览器中由于P3P隐私设置导致的iframe跨域cookie丢失问题,进而解决session失效导致的用户频繁重新登录的问题。这个方法在技术上是可行的,但需要网站管理员操作,确保P3P声明符合实际的...

    【ASP.NET编程知识】iframe跨域与session失效问题的解决办法.docx

    深入分析:出于隐私安全的考虑,IE 会丢失 Iframe 中的 Cookie,IE6/IE7 支持的 P3P(Platform for Privacy Preferences Project specification)协议默认阻止第三方无隐私安全声明的 Cookie,Firefox、Chrome 不...

    关于Iframe如何跨域访问Cookie和Session的解决方法

    在Web开发中,Iframe(内联框架)常用于嵌入其他网页内容,但涉及到跨域访问时,尤其是在处理Cookie和Session时,会遇到一些挑战。本文主要探讨如何解决Iframe跨域访问Cookie和Session的问题。 首先,理解跨域访问...

    服务器session丢失

    【服务器Session丢失】是一个常见的问题,尤其是在Web应用开发中,涉及到用户状态管理时。Session是ASP.NET中用于存储用户特定信息的一种机制,当用户在网站的不同页面之间导航时,Session可以帮助保持用户的状态。...

    iframe嵌入链接本地环境正常,正式环境重定向到登录解决

    - **Session丢失**:正式环境中,由于跨域请求或其他原因,服务器无法正确识别用户的Session信息,从而自动跳转至登录页面。 #### 解决方案 为了解决这个问题,可以通过以下步骤进行: 1. **协议一致性处理**:确保...

    iframe跨域嵌套自适应高度

    本文将详细介绍如何实现`iframe`跨域嵌套下的自适应高度调整,并讨论如何解决因跨域嵌套而可能引起的`session`丢失问题。 #### 一、`iframe`自适应高度原理与实现 1. **基本概念**: - **`iframe`**:`iframe`即...

    div+iframe弹出窗口:可最大化、最小化,可拖拽,带遮罩功能

    解决替换模态窗口,避免模态调模态出现的一系列问题:session丢失,提交返回,调父类方法层级多了或者多页面调的时候,parent层次级别问题。用iframe的话,直接可以反着从第一层用top方法调用。

    JSP中基于Session的在线用户统计分析

    同时,当Session结束或用户注销时,通过`valueUnbound`方法将Session从活跃列表中移除。 以下是一个简化的`HttpSessionBinding`类示例: ```java public class HttpSessionBinding implements javax.servlet....

    php session_start()出错原因分析及解决方法

    - **PHP在IE下的iframe跨域session丢失问题**:由于浏览器同源策略,跨域会导致会话丢失,可以通过设置 P3P 头部或使用共享域名的 cookie 来解决。 - **Failed to write session data** 错误:这通常是因为临时...

    解决前后端分离 vue+springboot 跨域 session+cookie失效问题

    解决过程: 首先发现sessionID不一致,导致每一次都是新的会话,当然不可能存在用户了。然后发现cookie浏览器不能自动保存,服务器响应set-cookie了 搜索问题,发现跨域,服务器响应的setCookie浏览器无法保存,...

    asp之让Session永不过期

    默认情况下,IIS会在无请求20分钟后关闭工作进程,导致Session丢失。因此,需要调整IIS的“回收工作进程(分钟)”设置,取消自动回收或者设置一个非常大的值。 在IIS管理器的应用程序池中,可以在“回收”选项卡...

    jsessionid存在的问题及其解决方案

    在Web开发中,`jsessionid`是一个常见的概念,它关联到Java服务器会话(Session)的管理。本文将深入探讨`jsessionid`存在的问题以及相应的解决方案,并结合提供的`DisableUrlSessionFilter.java`和`web.xml`文件来...

    JSP跨iframe如何传递参数实现代码

    若需要在iframe中使用session共享数据,可以考虑在加载子页面之前通过JavaScript设置一些隐藏的表单字段或通过cookie来传递信息,因为cookie可以在不同的请求中跨页面传递。 最后,有关使用onclick属性在...

    页面间传值

    Local Storage持久化存储数据,关闭浏览器也不会丢失,而Session Storage仅在当前会话有效。它们提供键值对存储,容量比Cookie大,但同样不能用于跨域,且数据安全性较低。 5. HTML5 History API: History API...

Global site tag (gtag.js) - Google Analytics