/* * 架构分析: * 1.我们要实现多网站同步登入的话,其实情况很多,这里大概介绍两种情况。 * 一种是公用一个二级域名的情况,另外一种是域名不在同一个域下面,这里就需要用到p3p协议实现了 * * 下面是我的测试思路 */ /* * 主要要解决一个问题,就是跨域的问题 * 测试思路,我们a.test.cc下创建一个cookie看b.test.cc下面是否可以可以获取到这个cookie * 如果不能获取到,我们试试p3p协议来实现跨域 * 我们需要验证根域名是否可以获取子域名下的cookie呢,这个非常重要 * */ //a.test.cc 中的a.php文件 header('Content-Type:text/html;charset=utf-8'); //setcookie('cookiea','',time()-3600,'/','test.cc'); if(isset($_COOKIE['cookiea'])) { echo $_COOKIE['cookiea'].'已经存在'; } else { setcookie('cookiea','i am cookie a',time()+3600,'/','test.cc'); echo $_COOKIE['cookiea'].'生成了'; } //b.test.cc中的b.php文件 if(isset($_COOKIE['cookiea'])) { echo 'i am can get cookiea'.$_COOKIE['cookiea']; } else { echo 'i am not can get cookiea'; } //test.cc中的c.php文件 if(isset($_COOKIE['cookiea'])) { echo $_COOKIE['cookiea']; } else { echo 'no exists'; } //使用三个文件的主要用途是测试setcookie($name,$value,$expire,$path,$domain,$secure,$httponly); //主要是想说明$domain这个参数,经过上面的测试可以看出,在同一个父域下的子域的cookie是可以共享的,也就是不需要跨域就能获取到 //所以这个时候给我们的启发是:比如在公司内部有多个系统例如:oa.kingnet.com d.kingnet.com kana.kingnet.com 这三个子域名 //的登入都可以从kingnet.com这个父域来获取的到,所以登入验证只需要放在kingnet.com上自然就实现了同步登入了 //如果是不同的域名呢?这里为了测试方便,我把cookie的域设置到我的范围之外来测试 今天才搞明白,原来不需要这样,下面是最好的证明 <?php //主要要解决一个问题,就是跨域的问题 //测试思路,我们a.test.cc下创建一个cookie看b.test.cc下面是否可以可以获取到这个cookie //如果不能获取到,我们试试p3p协议来实现跨域 //我们需要验证根域名是否可以获取子域名下的cookie呢,这个非常重 header('Content-Type:text/html;charset=utf-8'); //setcookie('cookiea','',time()-3600,'/','test.cc'); if(isset($_COOKIE['cookiea'])) { echo $_COOKIE['cookiea'].'已经存在'; } else { header('P3P: CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'); setcookie('cookiea','i am cookie a p3p',time()+3600,'/','a.test.cc'); echo $_COOKIE['cookiea'].'生成了'; } $url = "http://b.test.cc/b.php?ttname=".$_COOKIE['cookiea']; echo '<script text="text/javascript" src="'.$url.'"></script>'; ?> //这里接受a.test.cc的请求,这个时候把cookie种上即可, 现在知道同步登入虽然看起来挺烦吗的,但是这是不是一下轻松+愉快了呢 <?php if(isset($_GET['ttname'])) { $ttname = $_GET['ttname']; file_put_contents("/tmp/log.txt",$ttname."\r\n",FILE_APPEND); setcookie('ttname',$ttname,time()+3600,'/','b.test.cc'); echo 'i am can get cookiea'.$_GET['ttname']; } else { echo 'i am not can get cookiea'.$_GET['ttname']; } ?>