通过设置公共父域名的cookie达到垮子域名的效果
December 13th, 2010
No comments
今天为了能够成功访问公司另外一个部门的资源,不得不跨域设置cookie,因为对方使用了cookie做身份验证,否则请求会被拒绝。解决方案如下:
假设我现在使用的域名是 tank.tkiicpp.com,而我需要访问 subdomain.tkiicpp.com的一个资源,并且需要在cookie里指定一个特殊值以标识身份,例如: vendor = tkiicpp,这样才能通过 subdomain.tkiicpp.com 的身份验证,这个时候出现了一个问题,我必须在 tank.tkiicpp.com 域下设置一个 cookie 能够在 subdomain.tkiicpp.com 域使用。幸好这两个域名都是 tkiicpp.com 的子域名,这个就是解决这个问题的关键,通过设置一个cookie到父域名( tkiicpp.com ) 下,在访问 subdomain.tkiicpp.com 的时候,这个cookie会被默认带上,java代码如下:
Cookie cookie = new Cookie("vendor", "tkiicpp");
//设置为-1指定当前cookie不持久化,将随浏览器的关闭而被清理
cookie.setMaxAge(-1);
//指定cookie的域为父域名,注意域名开头必须为“.”
cookie.setDomain(".tkiicpp.com");
//指定cookie影响的域名下的路径,默认是没有的,如果不写,cookie将被忽略,这里设置为所有路径都使用
cookie.setPath("/");
response.addCookie(cookie);
为了能够在IE里设置父域名的cookie,必须添加下面在header属性,关于P3P的详细资料可以查看http://www.w3.org/TR/P3P/#P3PPolicies
response.addHeader("P3P", "CP=CAO PSA OUR");
参考资料: