• 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

  • 相关阅读:
    MyEclipse使用经验总结
    CSDN-markdown编辑器使用简介
    struts2提供的校验器
    JUnit4 中@AfterClass @BeforeClass @after @before的区别对比
    JAVA中文字符编码问题详解 控制台输出
    Statement、PreparedStatement
    struts2 文件上传
    SQL RIGHT JOIN 关键字:语法及案例剖析
    SQL LEFT JOIN 关键字:语法及案例剖析
    SQL INNER JOIN 关键字:语法及案例剖析
  • 原文地址:https://www.cnblogs.com/soundcode/p/7233737.html
Copyright © 2020-2023  润新知