关于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 相关文章推荐
如何跨站抓取别的站点的页面的补充
Oct 09 PHP
php中文本操作的类
Mar 17 PHP
PHP 事件机制(2)
Mar 23 PHP
深入理解PHP原理之错误抑制与内嵌HTML分析
May 02 PHP
Ajax实时验证用户名/邮箱等是否已经存在的代码打包
Dec 01 PHP
php后退一页表单内容保存实现方法
Jun 17 PHP
php+ajax做仿百度搜索下拉自动提示框(有实例)
Aug 21 PHP
php生成随机数的三种方法
Sep 10 PHP
Laravel框架中实现使用阿里云ACE缓存服务
Feb 10 PHP
PHP安装memcached扩展笔记
May 28 PHP
php实现图片以base64显示的方法
Oct 13 PHP
解决PHP程序运行时:Fatal error: Maximum execution time of 30 seconds exceeded in的错误提示
Nov 25 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函数
2010/02/16 PHP
PHP显示今天、今月、上月、今年的起点/终点时间戳的代码
2011/05/25 PHP
php 字符串替换的方法
2012/01/10 PHP
php中cookie的使用方法
2014/03/29 PHP
Yii查询生成器(Query Builder)用法实例教程
2014/09/04 PHP
Yii框架获取当前controlle和action对应id的方法
2014/12/03 PHP
PHP实现json_decode不转义中文的方法
2017/05/20 PHP
php字符串过滤strip_tags()函数用法实例分析
2019/06/24 PHP
PHP 图片合成、仿微信群头像的方法示例
2019/10/25 PHP
浅析PHP中json_encode与json_decode的区别
2020/07/15 PHP
语义化 H1 标签
2008/01/14 Javascript
javascript 24小时弹出一次的代码(利用cookies)
2009/09/03 Javascript
HTML Dom与Css控制方法
2010/10/25 Javascript
jquery $.each()使用探讨
2013/09/23 Javascript
JQuery为页面Dom元素绑定事件及解除绑定方法
2014/04/23 Javascript
基于jquery ui的alert,confirm方案(支持换肤)
2015/04/03 Javascript
Javascript中 toFixed四舍六入方法
2017/08/21 Javascript
vue2.0 datepicker使用方法
2018/02/04 Javascript
JavaScript使用类似break机制中断forEach循环的方法
2018/11/13 Javascript
JS实现判断有效的数独算法示例
2019/02/25 Javascript
梳理一下vue中的生命周期
2020/12/30 Vue.js
Python struct.unpack
2008/09/06 Python
python通过post提交数据的方法
2015/05/06 Python
python迭代dict的key和value的方法
2018/07/06 Python
深入浅析Python中的迭代器
2019/06/04 Python
如何解决tensorflow恢复模型的特定值时出错
2020/02/06 Python
Python模拟键盘输入自动登录TGP
2020/11/27 Python
python 实现汉诺塔游戏
2020/11/28 Python
Amaze UI 文件选择域的示例代码
2020/08/26 HTML / CSS
详解如何将 Canvas 绘制过程转为视频
2021/01/25 HTML / CSS
会计学专业求职信
2014/07/17 职场文书
好好学习保证书
2015/02/26 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
2015年幼儿园保育工作总结
2015/05/12 职场文书
工作表现证明
2015/06/15 职场文书
Java使用JMeter进行高并发测试
2021/11/23 Java/Android