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

/*
 * 架构分析:
 * 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'];
}
?>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值