使用P3P共享Cookie与Session小结

P3P是什么

P3P是一种被称为个人隐私安全平台项目(the Platform for Privacy Preferences)的标准,能够保护在线隐私权,使Internet冲浪者可以选择在浏览网页时,是否被第三方收集并利用自己的个人信息。如果一个站点不遵守P3P标准的话,那么有关它的Cookies将被自动拒绝,并且P3P还能够自动识破多种Cookies的嵌入方式。p3p是由全球资讯联盟网所开发的。来自百度

其实P3P并没有成为标准,只是一种规范,大家都在遵守这个规范来行事而已。

应用场景

1. 跨域共享 Cookie ;

2. 跨域共享 Session ;

演示 - 跨域共享Cookie

演示站点有两个:haoren.com为当前站点、huaidan.com为第三方站点。假设haoren.com站点下有一个P3P-Test.html,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>P3P Test</title>
</head>

<body>
<iframe src="http://huaidan.com/setCookie.php"></iframe>
</body>
</html>

可以看到里面的iframe指向了一个第三方站点huaidan.com的setCookie.php页,代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Set Cookie</title>
</head>

<body>
<?php
    setcookie("UserName","JRoger");
?>
</body>
</html>

代码的意思很简单就是设置一个名为UserName的Cookie。

然后在huaidan.com这个第三方站点下还有一个getCookie.php页面。代码如下:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Get Cookie</title>
</head>

<body>
<?php
    $userName = $_COOKIE["UserName"];
    echo($userName);
?>
</body>
</html>

意思就是获取一个名为UserName的Cookie并打印到页面上。

重点上演了:

我们访问 http://haoren.com/P3P-Test.html 后,再访问第三方站点的 http://huaidan.com/getCookie.php 发现没有获取到 Cookie。可是 IFrame 明明调用了http://huaidan.com/setCookie.php页面设置了Cookie。其实是因为 haoren.com 和 huaidan.com 代表的是两个域,它们的 Cookie 信息是不能共享的。这个时候我们用上 P3P 了。使用的时候很简单,在 setCookie.php 页面设置 Cookie 之前加上一段设置P3P的代码,完整代码如下:

<?php
    header('P3P:CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"');
    setcookie("UserName","JRoger");
    echo($_COOKIE["UserName"]);
?>

此步设置后。再按如上顺序访问一次发现 Cookie 设置成功了。

小结

这个问题也就是大家常说的"IFrame 跨域问题"。接下来可以想到 Session 跨域问题。其实道理是一样。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值