zoukankan      html  css  js  c++  java
  • 用户提交的cookie提交时为什么传不到服务器

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

    但象ie 6.0和ie 7.0有个自己的标准.要支持p3p,ie 6的缺省隐私等级设置为"中"——即"阻止没有合同隐私策略的第三方cookie"。而在用户浏览a.php教程时 a.com写入的为第一方cookie,其嵌入的iframe指向b.php.这时b.com写入的就为第三方cookie了,所以它是被ie当在了大门外。

    所以,每次当用户提交的cookie提交时,就挂掉了.因为传不到真实的服务器.

    好了,不多讲了,直接讲解决方案.

    php的程序

    可以直接在b网站中写入
    <?php
    header('p3p: cp="cura adma deva ps教程ao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"')
    ?>
    这样就能接受第三方的cookie啦。

    lighttpd的服务器

    server.modules    = ("mod_setenv")

    setenv.add-response-header = ( "p3p" => "cp='cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor'")

    apache的服务器

    <virtualhost>

    header set p3p 'cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"'

    </virtualhost>

    iis的服务器
    增加一个网站http头来解决问题;
    管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
    然后输入头名:p3p
    输入头内容:cp=cao psa our

    如果要登陆就如下设置

    setcookie('auth_member_string', 0, time()+3600,'/',$cfg['domain']);
     setcookie('auth_member_name',0,time()+3600,'/',$cfg['domain']);
     setcookie('auth_member_realname',0,time()+3600,'/',$cfg['domain']);

    登出

    setcookie('auth_member_string', 0, time()-1,'/',$cfg['domain']);
     setcookie('auth_member_name',0,time()-1,'/',$cfg['domain']);
     setcookie('auth_member_realname',0,time()-1,'/',$cfg['domain']);

    下面来看一个测试实例

    我只写一个大概,为了测试的方便,先编辑hosts文件,加入测试域名2881064151(c:windowssystem32driversetchosts)

    127.0.0.1        www.a.com
    127.0.0.1        www.b.com

    首先:创建 a_setcookie.php 文件,内容如下:

    <?php 
    //header('p3p: cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"');

    setcookie("test", $_get['id'], time()+3600, "/", ".a.com"); 
    ?>

    然后:创建 a_getcookie.php 文件,内容如下:

    <?php 
    var_dump($_cookie); 
    ?>

    最后:创建 b_setcookie.php 文件,内容如下:

    <script src="http://www.a.com/a_setcookie.php?id=www.b.com"></script>

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

    三个文件创建完毕后,我们通过浏览器依次访问:

    http://www.b.com/b_setcookie.php
    http://www.a.com/a_getcookie.php

    我们会发现,在访问b.com域的时候,我们并没有在a.com域设置上cookie值。

    然后我们修改一下a_setcookie.php文件,去掉注释符号,a_setcookie.php即为:

    <?php  
    header('p3p: cp="cura adma deva psao psdo our bus uni pur int dem sta pre com nav otc noi dsp cor"');

    setcookie2881064151("test", $_get['id'], time()+3600, "/", ".a.com");  
    ?>

    再次通过浏览器依次访问:

    http://www.b.com/b_setcookie.php
    http://www.a.com/a_getcookie.php

    这次,你会发现在访问b.com域的时候,我们设置了a.com域的cookie值。

    末了补充一句,似乎只有ie对跨域访问cookie限制比较严格,上述代码在firefox下测试,即使不发送p3p头信息,也能成功

  • 相关阅读:
    【AtCoder】AGC002
    【AtCoder】ARC059
    【AtCoder】AGC003
    【AtCoder】ARC060
    ES6学习总结之Set和Map的使用
    phaser学习总结之Text详解
    javascript实现数组排序的方法
    phaser学习总结之phaser入门教程
    javascript中字符串常用的方法和属性
    javascript中数组常用的方法和属性
  • 原文地址:https://www.cnblogs.com/cbryge/p/5957620.html
Copyright © 2011-2022 走看看