zoukankan      html  css  js  c++  java
  • PHP不同域名cookie共享(单点登录实现原理)

    PHP使用P3P完成COOKIE跨域操作
    实际实用中,类似的需求有,比如说我们有两个域名,我们想实现在一个域名登录后,能自动完成另一个域名的登录,也就是单点登录(SSO)功能。
    为了测试的方便,先编辑hosts文件,加入测试域名

    sudo vim /etc/hosts

    192.168.1.112 www.a.com

    192.168.1.112 www.b.com

    代码实现

    www.a.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); 

    ?>

    www.b.com域名下的代码文件:
    [b_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, "/", ".b.com");

    ?>

    [b_getcookie.php]
    <?php  
    var_dump($_COOKIE);  

    ?>

    依次访问
    http://www.b.com/b_setcookie.php
    http://www.a.com/a_getcookie.php
    会发现a.com域上已经有cookie值了

    代码分析
    在www.b.com的域名下给www.a.com创建cookie。
    若用户登录到www.b.com中,由此域名的b_setcookie.html中js实现方式给www.a.com域名设置cookie。
    假设www.a.com域名下的a_getcookie.php有cookie则设定www.a.com登录成功。

    b_setcookie.html:

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

    总结P3P的在上述代码中最主要的职责是:

    跨域产生 cookie

    注:上述代码在非IE下测试,即使不发送P3P头信息,也能成功。IE浏览器必需发送P3P才能成功!所以要跨域产生cookie还是有必要发送P3P的,毕竟IE的用户群体还是很大的。

    参考:

    http://my.oschina.net/goal/blog/199978

  • 相关阅读:
    用Visual C#实现文件下载
    解读C#中的规则表达式
    NET(C#)连接各类数据库集锦
    C#中编写多线程(1)——起步
    C#中的常用加密算法与其它语言的兼容性
    C#的事件处理机制应用
    TCP IP协议之通信详解
    手把手教你AspNetCore WebApi:认证与授权
    TCP IP协议之初识
    mysql中exit和in的区别
  • 原文地址:https://www.cnblogs.com/soundcode/p/7233737.html
Copyright © 2011-2022 走看看