zoukankan      html  css  js  c++  java
  • PHP-多域名单点登陆方案

    1.只是二级域名不同(比如a.xx.com, b.xx.com)

      利用cookie, 设置domain为".xx.com"即可

    2.多个本域名都不相同(比如www.a.com, www.b.com)

      1).可以在www.a.com的登录界面利用隐藏iframe + form表单 + js向www.b.com发出请求, b响应设置cookie

      2).可以www.a.com的登录界面进行跳转, 跳转到www.b.com的登录界面, 每次都进行cookie设置(头部: set-cookie; location;)

    3.P3P协议跨域(跨域设置cookie)

      在开发中,我们碰到的跨域主要还是纠结在IE,页面中的IFRAME或者FRAME或者JS跨域的时候,IE有安全策略限制页面不带cookie,但是如果我们加上P3P,就没有这策略的限制。这也是P3P来突破跨域的可行前提。

      以下为摘录的例子:

        http://www.a.com/a_setcookie.php 文件内容

    1 <?php
    2     setcookie("test", $_GET['id'], time()+3600, "/", ".a.com");

        http://www.a.com/a_getcookie.php 文件内容

    <?php
        var_dump($_COOKIE);

        http://www.b.com/b_setcookie.php 文件内容

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

      通过浏览器访问

        1.http://www.b.com/b_setcookie.php

        2.http://www.a.com/a_getcookie.php

        访问1后,我们并没有在2上发现设置上cookie值。

      将http://www.a.com/a_setcookie.php文件内容改为如下

    1 <?php  
    2     header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');   
    3     setcookie("test", $_GET['id'], time()+3600, "/", ".a.com");

      再次访问:
        1.http://www.b.com/b_setcookie.php
        2.http://www.a.com/a_getcookie.php
        在访问b.com域后,设置了a.com域的cookie值。

      上面例子可以看出通过发送P3P头信息而实现的跨域。(在Firefox不发送P3P也能跨域成功)

  • 相关阅读:
    forEach方法的实现
    经典笔试题
    Js中的filter()方法
    arguments参数对象
    随机验证码实现
    DB2 字符串比较
    博客园那篇文章,怎么被“注入”的?
    DB2存储过程创建临时表,返回临时表集合
    Struts的一些关键词
    DB2使用笔记生成存储过程ID
  • 原文地址:https://www.cnblogs.com/JohnABC/p/3340120.html
Copyright © 2011-2022 走看看