我们知道对于相同域名主体的顶级域名和其他级别域名的cookie共享已经有解决方案,那就是设置统一的domain和path。
那么不同域名主体的各级域名读写cookie的话,可以使用http的header头属性p3p。
设置这个属性主要为了解决IE的cookie跨域问题,可以使用iframe或img标签来实现。
P3P(Platform for Privacy Preferences)在java中的使用:
a.com域名下建立index.jsp,引用b.com的设置或获取cookie的路径:
<html>
<body>
<h2>a.com</h2>
<iframe src="http://b.com/test/setcookie">
this is an iframe.
</iframe>
</body>
</html>
b.com的setcookie:
@RequestMapping("/test/setcookie")
public ModelAndView setcookie(HttpServletResponse response){
response.setHeader("P3P", "CP=\"IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\"");
Cookie cookie = new Cookie("testp3p", "p3pvalue");
cookie.setPath("/");
response.addCookie(cookie);
return new ModelAndView("cookie");
}
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>b.com</title>
</head>
<body>
cookie设置完毕!
</body>
</html>
b.com建立index.jsp:
<%@ page import="com.alibaba.fastjson.JSON" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<body>
<h2>b.com</h2>
<%
out.write(JSON.toJSONString(request.getCookies()));
%>
</body>
</html>
操作顺序:访问a.com的index.jsp,新开tab访问b.com的index.jsp,观察两边cookie的情况。
使用场景:
比如:login.taobao.com登录了,将记录会话的cookie写入".taobao.com",同时发起一个请求,将cookie传递到tmall域名并写入".tmall.com";当然taobao可并不是这么干的哈哈。
关于各种语言设置p3p的方式可参照http://viralpatel.net/blogs/how-to-set-third-party-cookies-with-iframe/