PHP-多域名单点登录方案

1.只是二级域名不一样(好比a.xx.com, b.xx.com)php

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

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)cookie

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

  如下为摘录的例子:spa

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

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

 

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

 

<?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值。并非经过浏览器看js

  将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和chrome不发送P3P也能跨域成功,ie必须有P3P协议

相关文章
相关标签/搜索