P3P设置第三方cookie解决方案
原文地址:http://blog.csdn.net/lovingprince/article/details/5984449
首先,什么是 P3P ( Platform for Privacy Preferences ),其实就是一种可以提供个人隐私保护策略的平台协议。网上去去找,说得更清楚,我就不罗嗦了,我只举个实际例子让大家有个认识。
例如 first.abc.com 这个页面中使用 iframe( 或者 img 、 script 等等方式 ) 嵌入了一个 third.xyz.com 的页面, first.abc.com 会设置一些 cookie 到用户本地,例如 trackid, 由于我们浏览器直接访问就是 first.abc.com ,所以这些 first.abc.com 设置的 cookie 可以称为第一方 cookie ,而 third.xyz.com 也可能需要设置一些cookie 到本地,例如 uc1 什么的,相对而言,这个 third.xyz.com 设置的 cookie 叫第三方 cookie( 不是本家 ) ,而在 iframe 等发出请求到 third.xyz.com 时,一般希望能够将本域名 (.xyz.com) 下的原有 cookie( 例如这里他自己设置的 uc1) 带上,不过不幸的是由于某些浏览器用户隐私保护设置问题,不会把 third.xyz.com 的cookie 发送出去,如果 third.xyz.com 需要依赖这些本地发送的 cookie ,那么就会产生问题。
浏览器也有自己相应的默认选项。那如何让浏览器发送这些 cookie 呢?那就选择 高级 -> 勾选自动覆盖 cookie 处理。此时, third.xyz.com 的 cookie 就可以发送出去了。
不过话说回来,不可能让所有用户都去设置自己的浏览器吧?那怎么解决?那就是 P3P 的功能了,他提供给 web 服务器一个功能,制定一个策略 ,发表一个类似如下声明说:请把 cookie 给我吧,我拿来只是看看,可以帮助你提供更好的服务,绝对不透露给其他人。 浏览器收到这个声明后,会对比浏览器的设置,给用户一个提示,让用户选择是否发送 ( 当然,这个看浏览器如果处理的,一般来说看了声明都没有阻止 cookie 发送,有点奇怪的说 ) 。那么如何设置 P3P 呢?一种方式是使用 P3P 策略文件,相当之复杂,看了后怕,有兴趣自己去了解,另一种方式就是直接在 response中设置 P3P Header 即可,具体怎么设置,以及一些设置限制 请看 下面试验出来的结果:
1、 跟js 跨域不同,P3P 设置时只需要在任何同父域名的域名中header 设置一次即可生效,例如 xx.xyz.com 的域名response 中设置header 设置一次P3P ,和从yy.xyz.com 的response 中设置P3P header ,效果一样,他们都有.xyz.com 的顶级域名,设置一次之后针对所有顶级域名xyz.com 的应用都有效。
2、 上面说了P3P 的一个实际例子,可以知道,应该是需要cookie 发送的一方设置P3P 头,说明白一点,即first.abc.com 页面iframe 了 first.xyz.com ,那么应该在first.xyz.com 的response 中设置response Header( 记住是在第三方设置即可。)
3、 同一个顶级域名下,多次设置P3P ,仅第一次有效。
4、 置header 时需要同时设置cookie ,这些设置的cookie 就被P3P 声明了,后续都可以一直使用,没有在这里申明的cookie ,是被禁止被发送的。
5、 接上面第4 点,如果是前面被P3P 声明过的cookie ,例如t ,后面又被response 设置一次,但是这次却没有p3p 头,其实相当于这个cookie t 的申明被取消了,那么后续作为第三方cookie 的 t ,就会被禁止,这点一定注意。
6、 对了,关键的忘记了,头怎么设置?类似 rundata.getResponse().addHeader("P3P","CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'"); 即可,不过其中的英文字符代表什么意思,大家可以去官方上看下。不做解释了,下面提供几个参考地址。
IE6: http://msdn.microsoft.com/en-us/library/ms537343.aspx#cookie_filtering
另外:下面附几个 cookie 限制,由于还有小版本的区别,这里只是一个大概,不一定精确,具体个数,大家可以在自己的浏览器上用 JS 循环写 cookie 试一试。看下能保存多少
以下就是关于各浏览器之间对 cookie 的不同限制:
|
IE6.0 |
IE7.0/8.0 |
Opera |
FF |
Safari |
Chrome |
|
|
cookie 个数: |
每个域为 20个 |
每个域为 50 个 |
每个域为 30个 |
每个域为 50个 |
没有个数限制 |
每个域为 53个 |
|
cookie 总大小: |
4K |
4K |
4K |
4K |
4K |
4K |
对于后面多写的 cookie ,浏览器采用的替换策略也不一致, IE6 基本上是采用最近最少使用策略, ff 就是后面替换前面的。
P3P设置第三方cookie解决方案的更多相关文章
- 使用 P3P 规范让 IE 跨域接受第三方 cookie
前两天帮同事处理一个 js 跨域问题,使用 jsonp 跨域提交用户名密码请求,实现自动登录第三方网站,即 SSO(single-sign-on) 单点登录,一处登录处处登录.在 Chrome 下没问 ...
- 通过 P3P规范让IE跨域接受第三方cookie session
所谓第三方 cookie,就是说你访问网页 A,却接收到域名 B 的 cookie 设定指令.这可能是由于网页 A 请求或链接了 B 的网页,比如上面提到的 iframe 以及 jsonp. 我查到了 ...
- 解决Safari高版本浏览器中默认禁用第三方COOKIE(含demo)
前段时间在项目里遇到了一个比较头疼的问题,就是高版本的Safari中默认会阻止第三方cookie,这使得使用Safari浏览器的用户无法按照正常的业务逻辑进行操作. 问题展现 知识点 什么是第三方co ...
- Ipad Safari iframe cookie 当浏览器默认禁用第三方COOKIE
前一阵子,我们发现高版本的Safari中默认会阻止第三方cookie,如下图所示. 问题 什么是第三方cookie呢?在访问一个网站A时,网站A算作第一方,如果网站A中引用了另一个网站X(网站X的域名 ...
- 第三方cookie与搜索引擎+网站广告原理
cookie 摘自 : http://www.williamlong.info/archives/3125.html 关于cookie的安全知识 :http://shaoshuai.me/tech/2 ...
- python3 获取cookie解决方案
python3 获取cookie解决方案 方案一: 利用selenium+phantomjs无界面浏览器的形式访问网站,再获取cookie值: from selenium import webdriv ...
- 怎样限制第三方Cookie
使用Cookie的 SameSite 属性. 1. SameSite=Strict; 这个模式下, 服务器将会完全禁止第三方Cookie, 在跨站点时, 任何情况下都不会发送Cookie, 也就是说, ...
- 怎样理解第三方Cookie
1. Cookie往往是用来存储用户信息的, 但有些恶意站点设法伪造了带有正确Cookie的HTTP请求, 这时就会产生安全问题( CSRF 攻击 ). 这里恶意网站获取cookie的行为就是第三方c ...
- Chrome 提标 您的浏览器限制了第三方Cookie...解决方法
最近升级Chrome后会出现 您的浏览器限制了第三方Cookie,这将影响您正常登录,您可以更改浏览器的隐私设置,解除限制后重试. 解决方法: chrome://flags/ 把这句复制到浏览器回车 ...
随机推荐
- Java 基础练习题2
按要求编写Java程序: (1)编写一个接口:InterfaceA,只含有一个方法int method(int n): (2)编写一个类:ClassA来实现接口InterfaceA,实现int met ...
- easyui DataGrid 工具类之 util js
var jq; var tab; var tabsIndex; /** ...
- Webview组件和HTML的介绍
Deviceone平台并不是基于html5的跨平台开发工具.我们开发一个app都是使用原生的组件,但是在某些场景下html5也是非常好的选择,比如复杂的图文混排(类似新闻),比如报表chart之类用h ...
- Java程序的编码规范
所有的程序开发手册都包含了各种规则.一些习惯自由程序人员可能对这些规则很不适应,但是在多个开发人员共同写作的情况下,这些规则是必需的.这不仅仅是为了开发效率来考虑,而且也是为了后期维护考虑. 一.命名 ...
- Web API
https://www.asp.net/web-api/overview/getting-started-with-aspnet-web-api/tutorial-your-first-web-api ...
- 【转】Checkpoint--与lazy writer区别
checkpoint目的是减少数据库的恢复时间(服务奔溃或重启服务后的恢复),而lazy writer的目的是保证SQL OS 有空闲缓存块和系统有一定可用内存. Checkpoint和lazyW ...
- linux下发现可疑用户时处理办法
如果发现了linux被可疑用户远程登录了,怎么解决呢? 1.先查看最近系统的登录情况 last -10 表示最近10个用户登录的信息,如果发现有可疑账户,就是密码被破解了 [root@localhos ...
- qt creator 使用Ui文件的问题
一.显式地调用uic.exe 如何将UI文件生成头文件 1,将设计的UI文件拷贝到uic.exe的目录下Qt\Qt5.3.2\5.3\mingw482_32\bin. 2, 打开windows的CMD ...
- 简单播放器(增加sdl事件控制)
#include <libavcodec/avcodec.h> #include <libavformat/avformat.h> #include <libswscal ...
- 如何离线创建Ionic/cordova项目
在创建ionic项目的时候,需要联网下载许多东西,由于墙的缘故,我们在创建.添加android平台.编译过程中,失败的可能性非常高,为解决这个问题,我创建了一个空的Ionic1 tab项目,并完成了上 ...