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


Posted in PHP onApril 15, 2013

最近做登录系统的整合,其中遇到的一个最关键的问题为在一个统一的后台里需要无障碍的访问另外一个系统后台,这个系统是第三方提供的一个加过密的系统,后台自动登录接口是自己分析出来的,没有单独提供,当从统一后台通过自动登录接口登录时,系统直接跳转到系统后台首页,后台登录成功后所跳转的URL这里没法指定,控制不了跳转的页面,如果在统一后台里需要链接到这个系统后台的另外一个页面,而非后台默认首页时,也就是将第三方系统后台的菜单功能放到我们这个统一后台里。

对于这样的一个需要,这里会遇到一个问题,为了能正常访问第三方系统的后台栏目,必需确保已经登录该系统,否则会提示用户登录,所以在点击这些菜单链接时,系统必需已经登录。

为了解决这个问题,在页面头部添加了一个不可见的iframe,使其指向到自动登录接口,这个接口如果正常通过浏览器地址栏访问,当用户名和密码验证无误时,会跳转到系统后台首页,由于此时放在了一个不可见的IFRAME中,所以跳转对当前后台页面没有任何影响。按照我的设计方法,系统应该就可以正常使用了。

但,既然说到但了,就说明肯定遇到了问题,不然这里不会来这么大的一个转折的。

但由于这里各系统均属于不同的系统,域名不一样,所以出现了Iframe在IE中,不能正常生成第三方系统Cookie的情况,但在Firefox和其它浏览器中均可生成,所以用IE访问时,总是跳转到登录页面。

这里需要说明一下,这里的第三方系统放在我们自己的服务器上的,只是所有源码加了密!

最后查阅了相关资料后,发现在IE中,为了安全,阻止了通过IFRAME生成第三方域的COOKIE,为了解决这个问题,MS规定只要在HTTP的HEADER头中,设定P3P这个头,就可以通过IFRAME来生成第三方COOKIE了。

PHP中,P3P HEADER 头的设置方法如下:

header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);

注意:这里的P3P需要添加到第三方域生成Cookie的那个文件才生效,否则无济于事。

这里又有问题了,第三方系统生成COOKIE在后台的一个叫admin.php的页面里生成的,而这个页面又是加过密的,这可怎么办了,想了很久,最后同事灵机一动,说我们可以用我们自己的文件来包含它。靠,这方法太妙了,为什么我就没有想到了,同事真是太有才了,真是佩服的五体投地,当然,我对他这么一佩服,据他说自己当晚也自己佩服了自己一晚上。

所以最后的解决方案为将原来的admin.php文件命名为admin_2.php,然后新建admin.php,最后在这个文件中,添加上面所的P3P这个HEADER头,并再次包含 admin_2.php这个文件,最终代码如下:

header(‘P3P: CP=”CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR”‘);
include “admin_2.php”;

最后,问题彻底解决!

这里标题是COOKIE和SESSION的问题,实质上,基本上是一回事,SEESION最终的保存也是通过SESSION_ID保存到COOKIE源码天空,然后通过这个SID到服务器上找相应的SEESION数据,只要把COOKIE里的SEESION_ID这个COOKIE给删掉,SESSION也就失效了。

PHP 相关文章推荐
新版mysql+apache+php Linux安装指南
Oct 09 PHP
Zend Studio (eclipse)使用速度优化方法
Mar 23 PHP
PHP mb_convert_encoding文字编码的转换函数介绍
Nov 10 PHP
php中判断文件存在是用file_exists还是is_file的整理
Sep 12 PHP
使用PHP生成图片的缩略图的方法
Aug 18 PHP
php实现的微信红包算法分析(非官方)
Sep 25 PHP
WordPress中用于获取及自定义头像图片的PHP脚本详解
Dec 17 PHP
PHP实现文件上传和多文件上传
Dec 24 PHP
php is_executable判断给定文件名是否可执行实例
Sep 26 PHP
magento后台无法登录解决办法的两种方法
Dec 09 PHP
PHP用正则匹配form表单中所有元素的类型和属性值实例代码
Feb 28 PHP
ThinkPHP5.0框架使用build 自动生成模块操作示例
Apr 11 PHP
关于PHP的相似度计算函数:levenshtein的使用介绍
Apr 15 #PHP
关于PHP递归算法和应用方法介绍
Apr 15 #PHP
PHP 读取Postgresql中的数组
Apr 14 #PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 #PHP
做了CDN获取用户真实IP的函数代码(PHP与Asp设置方式)
Apr 13 #PHP
php检测图片木马多进制编程实践
Apr 11 #PHP
谈谈关于php的优点与缺点
Apr 11 #PHP
You might like
PHP数据库开发知多少
2006/10/09 PHP
ThinkPHP打开验证码页面显示乱码的解决方法
2014/12/18 PHP
smarty模板引擎使用内建函数foreach循环取出所有数组值的方法
2015/01/22 PHP
PHP版本常用的排序算法汇总
2015/12/20 PHP
PHP DB 数据库连接类定义与用法示例
2019/03/11 PHP
jQuery的实现原理的模拟代码 -5 Ajax
2010/08/07 Javascript
javascript正则匹配汉字、数字、字母、下划线
2014/04/10 Javascript
js图片处理示例代码
2014/05/12 Javascript
js对象的复制继承实例
2015/01/10 Javascript
IE及IE6浏览器中判断JS文件加载成功失败的方法
2015/02/18 Javascript
jquery.fastLiveFilter.js实现输入自动过滤的方法
2015/08/11 Javascript
node.js下LDAP查询实例分享
2015/09/30 Javascript
微信小程序 火车票查询实例讲解
2016/10/17 Javascript
jquery 判断是否支持Placeholder属性的方法
2017/02/07 Javascript
详解Vue 实例中的生命周期钩子
2017/03/21 Javascript
微信小程序封装http访问网络库实例代码
2017/05/24 Javascript
Underscore之Array_动力节点Java学院整理
2017/07/10 Javascript
Angular实现的进度条功能示例
2018/02/18 Javascript
angular2路由之routerLinkActive指令【推荐】
2018/05/30 Javascript
微信小程序开发之路由切换页面重定向问题
2018/09/18 Javascript
layui弹出框Tab选项卡的示例代码
2019/09/04 Javascript
vue获取data数据改变前后的值方法
2019/11/07 Javascript
ant design vue导航菜单与路由配置操作
2020/10/28 Javascript
解决vue侦听器watch,调用this时出现undefined的问题
2020/10/30 Javascript
python实现自动登录人人网并访问最近来访者实例
2014/09/26 Python
Python3调用微信企业号API发送文本消息代码示例
2017/11/10 Python
调整Jupyter notebook的启动目录操作
2020/04/10 Python
处理textarea中的换行和空格
2019/12/12 HTML / CSS
Backcountry旗下的户外商品闪购网站:steep&cheap
2016/09/22 全球购物
Pretty Little Thing美国:时尚女性服饰
2018/08/27 全球购物
师范应届生语文教师求职信
2013/10/29 职场文书
自荐信需注意事项
2014/01/25 职场文书
中国入世承诺
2014/04/01 职场文书
2015年超市员工工作总结
2015/05/04 职场文书
《认识年月日》教学反思
2016/02/19 职场文书
CSS极坐标的实例代码
2021/06/03 HTML / CSS