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">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=utf-8" />
<title>P3P Test</title>
</head><body>
<iframesrc="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">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-equiv="Content-Type"content="text/html; charset=utf-8" />
<title>Set Cookie</title>
</head><body>
<?phpsetcookie("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">
<htmlxmlns="http://www.w3.org/1999/xhtml">
<head>
<metahttp-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的代码,完整代码如下:

<?phpheader('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 跨域问题。其实道理是一样。

使用P3P共享Cookie与Session小结相关推荐

  1. Cookie与Session的异同

    Cookie与Session的异同 ​ Cookie和Session都是会话域对象,Cookie是保存在客户端的会话对象,而Session是保存在服务器端的会话对象.Cookie和Session存储数 ...

  2. Web页面或app等前端页面之Java Web的JSP、Servlet、Cookie、Session等技术小结

    Java Web学习,掌握JSP.Servlet.Cookie.Session等内容,使用JSTL进行数据展示完成实际应用. 2.3.1 XML基础 XML的用途.语法规则.语义约束.如何解析XML, ...

  3. java cookie共享_JavaWeb的session及其共享技术

    原标题:JavaWeb的session及其共享技术 1.什么叫会话 一次会话指的是:就好比打电话,A给B打电话,接通之后,会话开始,直到挂断电话,该次会话就结束了,而浏览器访问服务器,就跟打电话一样, ...

  4. php跨域session共享,PHP中利用COOKIE与SESSION联合实现SESSION跨域

    大家都知道 在一般情况下,一个网站只有一个域名,www.demo.com,但是也有些网站架构是由多个子域名组建的.所以就需要SESSION可以跨子域被 访问到,这样才可以实现用户的跨域登录.就是说客户 ...

  5. 关于模拟登陆的小结-抓包、cookie、session和token

    概述 上个星期根据bcloud写了个Java版本的登陆项目.其实本来时想做个Linux的百度云登陆软件,但是做到获取bdstoken的时候出了问题解决不了.后来我把bcloud项目下了下来用发现也有问 ...

  6. 日常小结-关于模拟登陆的小结-抓包、cookie、session和token

    概述 上个星期根据bcloud写了个java版本的登陆项目.其实本来时想做个linux的百度云登陆软件,但是做到获取bdstoken的时候出了问题解决不了.后来我把bcloud项目下了下来用发现也有问 ...

  7. IM开发基础知识补课(四):正确理解HTTP短连接中的Cookie、Session和Token

    1.前言 众所周之,IM是个典型的快速数据流交换系统,当今主流IM系统(尤其移动端IM)的数据流交换方式都是Http短连接+TCP或UDP长连接来实现.Http短连接主要用于从服务器读取各种持久化信息 ...

  8. java中的Cookie是什么_第74节:Java中的Cookie和Session

    第74节:第74节:Java中的Cookie和Session ServletContext: 什么是ServletContext,有什么用哦,怎么用呢? 启动服务器后,会给每个应用程序创建一个Serv ...

  9. Cookie、Session、Token、JWT区别与联系

    本文来说下与安全相关的话题,Cookie.Session.Token.JWT相关的知识与内容 文章目录 无状态的HTTP协议 什么是认证(Authentication) 什么是授权(Authoriza ...

最新文章

  1. ASP.NET的用户控件
  2. 如何实现Word、PDF,TXT文件的全文内容检索?
  3. 【收藏】Vue+elementUI的this.$refs.对象名.方法名的理解
  4. mysql模板标签数据库设计_MySQL数据库规范化设计
  5. 485光隔离中继器产品特点及应用领域介绍
  6. ACM中Java使用总结
  7. adb interface找不到驱动程序_Windows 10现支持更多设备的驱动程序更新
  8. c语言实验赵欣版答案,赵欣-计算机科学与技术学院
  9. osgEarth世界坐标和经纬度坐标相互转换
  10. 怎样和求职者聊天_我如何学会欣赏求职者
  11. java获取指定日期当月和下个月的第一天
  12. CVPR2022:计算机视觉中长尾数据平衡对比学习
  13. 苹果 iPad 上如何设置和使用蓝牙鼠标?
  14. python安卓模拟器图像识别_Android模拟器识别检测技术
  15. 商务参考体系结构:企业对消费者 (B2C)
  16. 三星java游戏打雪仗下载_三星拱照之驸马镇邪
  17. I2C中关于ACK和NACK的几点东西
  18. macOS 动态桌面
  19. 机器人学习笔记——机器人概述
  20. java中font的意思_java中的Font

热门文章

  1. java反射中,Class.forName和classloader的区别
  2. Codeforces Round #423 (Div. 2, rated, based on VK Cup Finals) C. String Reconstruction 并查集
  3. 从此以后,江湖有了它的传说!
  4. 尸鬼封尽の覆盖源码 管你什么鬼一招解决
  5. u-boot移植问题记录(一)--U_BOOT_CMD区别
  6. Oracle note 基礎入門篇1
  7. 七里香飘传来的幸福简单爱
  8. python学习干货教程(5):#!/usr/bin/python
  9. RocketMQ 实战(一) - 简介
  10. 区块链100讲:EOS环境安装和智能合约部署实战