这里记录一下p3p实现跨域操作

来源:互联网 发布:淘宝二手电脑店铺推荐 编辑:程序博客网 时间:2024/05/21 11:34

/* * 架构分析: * 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种上即可, 现在知道同步登入虽然看起来挺烦吗的,但是这是不是一下轻松+愉快了呢<?phpif(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'];}?>

0 0
原创粉丝点击