如何解决iframe session 失效问题

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何解决iframe session 失效问题相关的知识,希望对你有一定的参考价值。

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

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

何为跨域跨域session/cookie?

也就是第三方session/cookie。第一方session/cookie指的是访客当前访问的网站给访客的浏览器设置的seesion /cookie,
会被存储在访客的计算机上。第三方session/cookie指的是当前访问的网站中会加载(嵌入)另外第三方的网站代码,例如促销广告,那么第三方网
站也会在访客的计算机上添加session/cookie,这种就是第三方session/cookie。

我的问题

在开发讯息在线产品(http://iap.pgia.net)测试各种浏览器的兼容性时,发现IE浏览器(v7\8)都无法登录(总是提示验证码不匹配错误),而其它浏览器无此问题(firefox、百度等)。因此可以断定这和浏览器脱不了干系。

初步分析:

细查发现,在使用IE浏览器(v7\8)访问时,服务器端日志中显示sessionId一直在变化,每次请求都会产生一个全新的sessionId.

显然这是导致无法登录的直接唯一原因,如果解决这个问题则可正常登录。

深入分析:

为什么在IE浏览器(v7\8)上会出现这种情况呢,百度了解后得知:

出于隐私安全的考虑,IE会丢失Iframe中的Cookie,IE6/IE7支持的P3P(Platform for Privacy Preferences
Project (P3P) specification)协议默认阻止第三方无隐私安全声明的cookie,Firefox、Chrome 不存在此问题。

我们知道Session
其实就是基于Cookie的。客户端在第一次与服务器建立会话时,会分配给客户端一个随机的sessionId,并存于客户端cookie中,然后在之后的请求中,会带上这个Cookie,如果在客户端找不到这样的Cookie,那么服务器就会重新分配一个。

而我的应用结构恰恰如此,即内置一个iframe嵌入远程应用来实现的。

解决办法:

要解决这个问题就是要在请求时添加“P3P”协议。那么如何实现呢?

在框架页面加入如下代码:

复制代码
代码如下:

<%
// 解决IE7\8跨域访问问题

response.setHeader("P3P","CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi
CONi HIS OUR IND CNT\"");
%>

至此,问题已解决
参考技术A 其他不知道说说自己的苹果5出现问题是手机自动变静音然后在保修期的最后6天去苹果维修点他们把手机留下过了5天电话通知免费换了一个新手机还是有一年的保修期自己亲身经历

TP3.2.*解决session过期不失效 和 设置不成功问题

1、背景:本来我想设置session有效期1800秒即30分钟 失效的,可是实际使用TP3.2.0的时候发现,登录了几天用户竟然没有失效,一直都可以登录。

2、解决:

  2.1 在config.php中设置SESSION_OPTIONS数组

/* SESSION全局配置 */
    ‘SESSION_OPTIONS‘ => array(
        ‘path‘ => RUNTIME_PATH . ‘Temp/‘,
        ‘use_cookies‘ => 1,         //是否在客户端用 cookie 来存放会话 ID,1是开启
        ‘use_trans_sid‘ => true,    //跨页传递
        ‘expire‘ => 1800,
    ),

  2.2 在ThinkPHP/common/functions.php中1074修改(或全局搜索【gc_maxlifetime】):

  将 

if(isset($name[‘expire‘]))          ini_set(‘session.gc_maxlifetime‘, $name[‘expire‘]);

  修改成:

if(isset($name[‘expire‘])){ini_set(‘session.gc_maxlifetime‘, $name[‘expire‘]);ini_set(‘session.cookie_lifetime‘, $name[‘expire‘]);}

  保存,清除浏览器和服务器RunTime/Temp 下缓存,再次登录页面,等待过期即可。(测试时候可以设置expire=10)

 

以上是关于如何解决iframe session 失效问题的主要内容,如果未能解决你的问题,请参考以下文章

解决vue nodejs中cros跨域cookie和session失效的问题

如何让iframe自适应高度? 我也遇到这个问题,我想知道你是怎么解决的呢?

cookie或session丢失请重试怎么解决

php在客户端禁用cookie时让session不失效的解决方法

java web中,在session失效之前向数据库插入一条数据,应该怎么做?如何监听session失效?

解决指向iframe的target失效