使用p3p简洁策略解决第三方跨域cookie问题 - Q+ PC - Q+开发者论坛 - Powered by Discuz!
使用p3p简洁策略解决第三方跨域cookie问题
[复制链接]
584692970
版主
Rank: 7Rank: 7Rank: 7
串个门
加好友
打招呼
发消息
电梯直达
跳转到指定楼层
楼主
发表于 2011-11-4 14:26:50
|只看该作者
|倒序浏览
本帖最后由 584692970 于 2011-11-4 14:29 编辑
问题
在Q+环境中,第三方应用经常会遇到这样的问题,无法获取用户登录状态,应用无法正常读写Session数据等。究其原因,是由于第三方应用使用了cookie来记录用户身份,或者使用cookie来保存应用数据。
那为什么原本在浏览器中一切正常的应用在Q+中就会出现这些问题呢?
原因
Q+使用一个iframe包含第三方应用,Q+的vm层的url是vm.qplus.com,与第三方的域是不同的,所以第三方的cookie是跨域cookie。由于Q+使用了ie浏览器的默认隐私设置,如图:
没有使用隐私策略声明的网站的cookie都是被阻止的。
解决方法
在第三方应用的每个http response的header中设置p3p:
P3P: CP="CURa ADMa DEVa PSAo PSDoOUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"
一下是常见后台语言设置p3p精简隐私策略的示例,
JSP:
<%
response.setHeader("P3P","CP=\" CURa ADMa DEVa PSAoPSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR \"");
%>
PHP:
<?php
header('P3P: CP=" CURa ADMa DEVa PSAoPSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR "');
?>
ASP
<%
Response.AddHeader "P3P", "CP= CURa ADMa DEVa PSAo PSDo OUR BUSUNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR "
%>
附件: 你需要登录才可以下载或查看附件。没有帐号?立即注册
本主题由 584692970 于 2011-11-4 14:26:50 置顶
分享到:
QQ空间QQ空间
腾讯微博腾讯微博
腾讯朋友腾讯朋友
收藏收藏0
举报
minren
版主
Rank: 7Rank: 7Rank: 7
串个门
加好友
打招呼
发消息
沙发
发表于 2011-11-14 18:32:26
|只看该作者
本帖最后由 minren 于 2011-11-14 18:55 编辑
也可以通过配置Web Server来添加P3P头
lighttpd
server.modules = ("mod_setenv")
setenv.add-response-header = ( "P3P" => "CP='CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR'")
apache
<VirtualHost>
....
Header set P3P 'CP="CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR"'
...
</VirtualHost>
IIS
管理工具——〉选择一个网站——〉属性——〉http头,增加一个http头
然后输入头名:P3P
输入头内容:CP=CURa ADMa DEVa PSAo PSDo OUR BUS UNI PUR INT DEM STA PRE COM NAV OTC NOI DSP COR
如果没有权限配置IIS服务器,但是你用的是asp.net的话
可以用httpmodual来实现在全部页面或者部分页面头部插入所需要的标志