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

 这篇文章主要介绍了iframe跨域与session失效问题的解决办法,有需要的朋友可以参考一下

何为跨域跨域session/cookie?
 
也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上。第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie。
 
我的问题
 
在开发讯息在线产品(http://iap.pgia.net)测试各种浏览器的兼容性时,发现IE浏览器(v78)都无法登录(总是提示验证码不匹配错误),而其它浏览器无此问题(firefox、百度等)。因此可以断定这和浏览器脱不了干系。
 
初步分析:
 
细查发现,在使用IE浏览器(v78)访问时,服务器端日志中显示sessionId一直在变化,每次请求都会产生一个全新的sessionId.
 
显然这是导致无法登录的直接唯一原因,如果解决这个问题则可正常登录。
 
深入分析:
 
为什么在IE浏览器(v78)上会出现这种情况呢,百度了解后得知:
 
出于隐私安全的考虑,IE会丢失Iframe中的Cookie,IE6/IE7支持的P3P(Platform for Privacy Preferences Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox、Chrome 不存在此问题。
 
我们知道Session 其实就是基于Cookie的。客户端在第一次与服务器建立会话时,会分配给客户端一个随机的sessionId,并存于客户端cookie中,然后在之后的请求中,会带上这个Cookie,如果在客户端找不到这样的Cookie,那么服务器就会重新分配一个。
 
而我的应用结构恰恰如此,即内置一个iframe嵌入远程应用来实现的。
 
解决办法:
 
要解决这个问题就是要在请求时添加“P3P”协议。那么如何实现呢?
 
在框架页面加入如下代码:
 
代码如下:
<%    
// 解决IE78跨域访问问题   
response.setHeader("P3P","CP="IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT"");   
%>
 
至此,问题已解决
 

时间: 2024-11-03 12:50:43

iframe跨域与session失效问题的解决办法的相关文章

iframe跨域与session失效问题的解决办法_实用技巧

何为跨域跨域session/cookie? 也就是第三方session/cookie.第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie, 会被存储在访客的计算机上.第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网 站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie. 我的问题 在开发讯息在线产品(http://iap.p

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

今天搞的一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况). 很明显,session无法被保存.但是直接在地址栏打开那个登录页面,一切都正常啊.真是奇怪啊. 在网上搜索了一下.发现这个问题还真有不少人提及到.最后的解决方法是在那个登录页面里加上以下代码: 代码如下: <span style="font-family:Microsoft YaHei; font-size:14px">header('P3P: CP="ALL ADM

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

今天搞的一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况). 很明显,session无法被保存.但是直接在地址栏打开那个登录页面,一切都正常啊.真是奇怪啊. 在网上搜索了一下.发现这个问题还真有不少人提及到.最后的解决方法是在那个登录页面里加上以下代码: 复制代码 代码如下: <span style="font-family:Microsoft YaHei; font-size:14px">header('P3P: CP="AL

浏览器跨域获取Lrc歌词数据的解决办法

解决|浏览器|数据 获取同一个域的数据,可以通过XMLHTTP组件或IFRAME来实现,不存在跨域访问的权限问题,因此比较简单.     但如果要访问不同域的数据时,由于浏览器的安全设置,XMLHTTP没有权限获取数据,而IFRAME没有权限将获取的数据传递给父窗口,似乎没有其它解决办法.     顿悟--     网页内引用不同域的脚本并不会提示权限不足,对了,就是它没错!     解决方法找到了,现在来简单测试一下:     首先在51js.com服务器上新建一页面(Test.html).

IE下iframe跨域调用session/cookie失效解决办法

在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie.注意,这些站点在response里面设置的cookie还是会被发送到浏览器的. 在用户浏览a.php时 A.com写入的为第一方Cookie,其嵌入的iframe 指向b.php.这时B.com写入的就为第三方Cookie了,所以它是被IE当在了大门外.

ASP.NET 程序中删除文件夹导致session失效问题的解决办法分享_实用技巧

在Global中  Application_Start 添加 如: 复制代码 代码如下: void Application_Start(object sender, EventArgs e)    {        //在应用程序启动时运行的代码        System.Reflection.PropertyInfo p = typeof(System.Web.HttpRuntime).GetProperty("FileChangesMonitor", System.Reflect

PHP简单实现HTTP和HTTPS跨域共享session解决办法

  这篇文章主要介绍了PHP简单实现HTTP和HTTPS跨域共享session解决办法,本文讲解的方法相对简单,需要的朋友可以参考下 HTTP.HTTPS协议下session共享解决cookie失效 的办法:(也许不是最好的,但是实用) 原理就是把session id设置到本地的cookie, 代码如下: $currentSessionID = session_id(); session_id($currentSessionID ); 简单事例代码: (HTTP) 代码如下: session_s

PHP简单实现HTTP和HTTPS跨域共享session解决办法_php实例

HTTP.HTTPS协议下session共享解决cookie失效 的办法:(也许不是最好的,但是实用) 原理就是把session id设置到本地的cookie, 复制代码 代码如下: $currentSessionID = session_id(); session_id($currentSessionID ); 简单事例代码: (HTTP) 复制代码 代码如下: session_start();  $currentSessionID = session_id();  $_SESSION['te

HTTP和HTTPS跨域共享session解决办法

HTTP.HTTPS协议下跨域解决session共享的办法,也许不是最好的,但是比较实用.如下是具体的解决方案. $currentSessionID=session_id(); session_id($currentSessionID); 简单示例代码: (HTTP) <?php session_start(); $currentSessionID=session_id(); $_SESSION['username']='Alixixi'; echo '<a href="https: