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


Posted in PHP onOctober 10, 2013

今天搞的一个登录页面,被别的网站用iframe嵌进去后,死活无法登录(只在IE中存在这种情况)。

很明显,session无法被保存。但是直接在地址栏打开那个登录页面,一切都正常啊。真是奇怪啊。

在网上搜索了一下。发现这个问题还真有不少人提及到。最后的解决方法是在那个登录页面里加上以下代码:

<span style="font-family:Microsoft YaHei; font-size:14px">header('P3P: CP="ALL ADM DEV PSAi COM OUR OTRo STP IND ONL"'); 
session_start();</span>

可能这个问题跟我的登录页面是采用javascript的location跳转也有关。但没有深入测试研究。

以下是拓展阅读:

---------------------------------------------

今天在处理腾讯朋友应用的时候,测试给我发来个工单,说应用在IE7 上无法使用.出现登陆超时错误.

第一反应是session丢失了.

于是上网找了下 IE7 iframe session丢失问题.后来找到如下文章,问题解决:

=============================================

昨天,我在校内上做的时间日记终于上线了。上线第一天有80多个用户安装,但却以外收到不少用户的反馈说应用不可用。我之前都是在firefox上开发的(估计校内工作人员也是用firefox审核的),在使用IE7测试时,却发现首页之外的页面全都无法正常打开。

在网上查找了许多资料,发现在IE7中存在这样的问题:如果页面中存在着一个或多个iframe的子页面,那么在子页面中创建session可能无 法成功,这样session数据就无法和其他页面所共享。在开发校内、51应用时,假设采用iframe方式,很可能会遇到这样的问题。而且这个问题只存 在于IE7浏览器中,我在firefox, IE6和chrome等浏览器中测试均没有问题。

解决方案是:在运行session_start之前,在程序中加上如下一句(以php语言为例),大致是向浏览器声明一下安全级别,这样iframe子页面在创建session时就不会有问题了:

header('P3P: CP=”ALL ADM DEV PSAi COM OUR OTRo STP IND ONL”‘);

另外,我还了解到:如果二级域名中包含了下划线,如:your_domain.yourhost.com,在建立和传递session时也可能会出现问题。

一点感想:

1)时隔多年,浏览器兼容性问题仍然没有得到彻底解决,IE浏览器仍然是那么让开发者感到痛苦和折磨。
2)发布应用前,一定要经过严密的浏览器兼容性测试,否则就有可能损失应用的第一批用户。

==============================================

其他参考文章:

==============================================

解决iframe中jsessionid无法传递导致session丢失的问题

http://618119.com/archives/2007/12/19/48.html

在实现 ISMP2.1.1 接口的适合需要用到sso,而ISMP里定义的接口是需要在iframe等嵌入页面中调用sso接口,在实际开发中发现session无法正常传递。

重现问题的场景是:

1.先访问a站点:http://192.168.18.2/test.jsp

test.jsp的代码为:

<html> 
<head> 
<title> 618119.com </title> 
</head> 
<body> 
<iframe src=”http://192.168.18.3/sso.jsp?ssoinfo=xxxx “> 
</iframe> 
</body> 
</html>

sso .jsp里读取传递的ssoinfo,反向调用ISMP认证接口,

生成session,然后放入指定的属性值,

session .setAttribute(“ssoUser”,”lizongbo”);
页面再重定向到 http://192.168.18.3/iframe.jsp

response.sendRedirect(“/iframe.jsp”);

iframe.jsp中读取session中ssoUser的属性值,会发现无法读取。
2.如果先访问了 192.168.18.3的页面,再访问192.168.18.2的页面,此时的iframe嵌入是可以传递已生成好的jsessionid Cookie.

因此解决的办法有:

a.在url中加上jsessionid.

例如重定向到 response.sendRedirect(“/iframe.jsp;jsessionid =lizongbo”);
而这种情况下,如果iframe.jsp页面内的其它连接的url没有加上jsessionid,

也无法继续传递session,不过通过在客户端的js来为每个超连接的href属性重写加上jsessionid.

b.sso.jsp里设置P3P头信息
例如 P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”

或 P3P:CP=”CAO PSA OUR”

java代码为:

response.addHeader(“P3P”,”/”CAO PSA OUR/”");

PHP 相关文章推荐
PHP中for循环语句的几种变型
Mar 16 PHP
php 需要掌握的东西 不做浮躁的人
Dec 28 PHP
php !function_exists(&quot;T7FC56270E7A70FA81A5935B72EACBE29&quot;))代码解密
Jan 07 PHP
PHP中SESSION使用中的一点经验总结
Mar 30 PHP
使用Apache的htaccess防止图片被盗链的解决方法
Apr 27 PHP
CodeIgniter上传图片成功的全部过程分享
Aug 12 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
php防止恶意刷新与刷票的方法
Nov 21 PHP
php实现基于PDO的预处理示例
Mar 28 PHP
php+ajax实现商品对比功能示例
Apr 13 PHP
php+layui数据表格实现数据分页渲染代码
Oct 26 PHP
浅析PHP中的 inet_pton 网络函数
Dec 16 PHP
php检测网页是否被百度收录的函数代码
Oct 09 #PHP
php MessagePack介绍
Oct 06 #PHP
php 批量替换程序的具体实现代码
Oct 04 #PHP
php5.5中类级别的常量使用介绍
Oct 02 #PHP
php mysql_real_escape_string函数用法与实例教程
Sep 30 #PHP
PHP文件上传主要代码讲解
Sep 30 #PHP
php中利用str_pad函数生成数字递增形式的产品编号
Sep 30 #PHP
You might like
php 过滤危险html代码
2009/06/29 PHP
支持数组的ADDSLASHES的php函数
2010/02/16 PHP
用PHP编写和读取XML的几种方式
2013/01/12 PHP
php、java、android、ios通用的3des方法(推荐)
2016/09/09 PHP
thinkphp5.1 文件引入路径问题及注意事项
2018/06/13 PHP
ThinkPHP类似AOP思想的参数验证的实现方法
2019/12/18 PHP
JavaScript面象对象设计
2008/04/28 Javascript
用于判断用户注册时,密码强度的JS代码
2009/01/01 Javascript
javascript 函数调用规则
2009/08/26 Javascript
javascript 基础篇3 类,回调函数,内置对象,事件处理
2012/03/14 Javascript
jquery常用特效方法使用示例
2014/04/25 Javascript
JavaScript实现twitter puddles算法实例
2014/12/06 Javascript
修复jQuery tablesorter无法正确排序的bug(加千分位数字后)
2016/03/30 Javascript
JS不用正则验证输入的字符串是否为空(包含空格)的实现代码
2016/06/14 Javascript
js生成随机数(指定范围)的实例代码
2016/07/10 Javascript
JS中创建自定义类型的常用模式总结【工厂模式,构造函数模式,原型模式,动态原型模式等】
2019/01/19 Javascript
JavaScript实现选项卡效果的分析及步骤
2019/04/16 Javascript
解决layui调用自定义方法提示未定义的问题
2019/09/14 Javascript
使用layui实现树形结构的方法
2019/09/20 Javascript
js 压缩图片的示例(只缩小体积,不更改图片尺寸)
2020/10/21 Javascript
对python判断ip是否可达的实例详解
2019/01/31 Python
Python使用numpy模块实现矩阵和列表的连接操作方法
2019/06/26 Python
深入学习python多线程与GIL
2019/08/26 Python
基于python实现把图片转换成素描
2019/11/13 Python
python GUI库图形界面开发之PyQt5输入对话框QInputDialog详细使用方法与实例
2020/02/27 Python
Python 定义只读属性的实现方式
2020/03/05 Python
使用Python matplotlib作图时,设置横纵坐标轴数值以百分比(%)显示
2020/05/16 Python
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
Guess荷兰官网:美国服饰品牌
2020/01/22 全球购物
哈曼俄罗斯官方网上商店:Harman.club
2020/07/24 全球购物
什么是Smarty变量操作符?如何使用Smarty变量操作符
2014/07/18 面试题
小学新学期教师寄语
2014/01/18 职场文书
财务人员岗位职责
2015/02/03 职场文书
python实现网络五子棋
2021/04/11 Python
分享几种python 变量合并方法
2022/03/20 Python
Django数据库(SQlite)基本入门使用教程
2022/07/07 Python