[微博]IE6跨域跳转无法保存session或者cookie

首先说下,这是和微博做应用时发现的。之前听说过P3P,至于怎么用还不知道。

起因:在IE6下微博的应用无法正常运行,表现为无法取得session或者cookie里的信息。在开发微博时,会自动跳转,我想是在跳转时把session或者cookie给丢失了。其它浏览器正常。


解决文案:
<?php
header('P3P: CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV IDC DSP COR CURa ADMa OUR IND PHY ONL COM STA"');


以下摘抄网上相关信息:
http://www.html-js.com/?p=1227
现象:
这种现象遇到过两次了,今天再次遇到,于是想到整理一篇文章出来,以后也免得遇到的时候再次费劲去研究了,这个现象目前对于淘宝网的应用特别适用.
假设现在有一个页面A,它的url是:www.tmall.com.在这个页面里会发出几个异步的请求,先假设只发出一个请求B,请求的url:tcc.taobao.com.
淘宝网有一个统一的session框架,所有的应用都会引用这个session框架,所以tcc.taobao.com也引用了这个框架.
现在假设我从www.tmall.com登录,这里有个前提,tmall.com和taobao.com的用户系统其实是一个系 统,tmall.com的登录系统也只是在taobao.com的登录系统外面套了一个壳子,所以,从tmall.com登陆的时 候,taobao.com也登录了.
然后我们访问 www.tmall.com,页面去请求tcc.taobao.com.
这时候,因为淘宝这个统一的session框架在页面每次被访问的时候都会试图去设置uc1这样一个cookie,uc1是用来判断里面有一些重要信息,例如判断用户是否登录.
注意这时候页面的域是tmall.com,而试图设置cookie的页面是taobao.com域的,这时候出现跨域了.于是设置uc1直白,这时候uc1不会保留原来的值,而是会被清空.接下来因为uc1的丢失,可能会造成一连串的连锁反应,最后造成用户自动退出登录.

所谓的cookie跨域,并不是taobao.com试图去设置tmall.com的cookie,而是taobao.com试图去设置taobao.com的cookie,但是这个过程是在一个tmall.com的域里进行的.

这种情况下在其他主流浏览器中是没有问题的,但是在ie中就会出现问题,因为浏览器认为这是不安全的行为,你跑别人的页面里去设置自己的cookie,就跟你跑别人家床上去XXOO一样的道理.

解决方法很简单,在请求的头部设置P3P:

header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA div COM NAV OTC NOI DSP COR"');
setcookie("test""test", time()+3600, "/", ".taobao.com");

至此,问题已经解决了.

淘宝的session框架没有加这个头部,如果可能,最好可以升级一下session框架,但是这个工程量太浩大,要做很多测试,所以目前都是在出现问题的应用中加入P3P来解决cookie的跨域问题
 


http://www.iteye.com/topic/340740
问题特征:

       在系统1中(域名a.com)iframe嵌入系统2的页面(b.com),那么内嵌的页面(所属b.com)在跳转的过程中会丢失Cookie。

 问题原因:

      在frameset里面,也就是里面的frame是来自第三方站点(不同IP或不同域名),那么默认情况下IE会自动禁用这些站点的cookie,也就是在请求某url时在HTTP header里不发送它们的cookie,包括session的cookie。注意,这些站点在response里面设置的cookie还是会被发送到浏览器的。

 
解决方法:
      对frame里面的引用站点的response header里面添加一个确认信息
 
      response.addHeader("P3P","CP=CAO PSA OUR")。

 

详细的参考:

        http://support.microsoft.com/default.aspx?scid=KB;EN-US;Q323752


300*300
  • 没有相关文章
  • 没有评论
 文章首页关于迷茫时代关于我写意人生
版权所有:迷茫时代 All rights reserved   
执行时间:0.00563 秒