Archive

Archive for the ‘web’ Category

通过设置公共父域名的cookie达到垮子域名的效果

December 13th, 2010 Tank 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");

 

参考资料:

1、http://blogs.unbolt.net/index.php/brinley/2010/03/31/p3p-fix-for-internet-explorer-to-access-cross-domain-cookie-in-iframe

Categories: Java, web Tags: