我正在创建一个从域 test.example.com 托管的Java过滤器,它将根据名称删除某些cookie(禁止的cookie名称列表存储在过滤器的init配置中)。
现在,我有来自其他网站的Cookie,其域属性设置为 .example.com 。其中一些cookie需要通过我正在开发的过滤器来阻止/删除。
我读过在线文章,包括一些与cookie域匹配相关的stackoverflow帖子。我非常确定具有域属性 .example.com 的这些Cookie应该可以从子域 test.example.com 访问。事实上,使用调试我可以验证是否能够访问这些cookie。但是,我通过调用setMaxAge(0)
并通过addCookie
将其添加回响应来删除它们时遇到问题。事实证明,cookie正在重复,而不是被删除。
我想知道是否有可能从 test.example.com (子域)中移除域名属性 .example.com (基本域)的Cookie。或者只有在我从基域执行我的Java过滤器时才能删除cookie - 这是 example.com ?
以下是我的代码片段:
if (cookieBlockList != null) {
Cookie[] cookies = httpRequest.getCookies();
for (int i=0; i < cookies.length; i++) {
String cookieName = cookies[i].getName();
for(int j=0; j < cookieBlockList.length; j++) {
if (cookieName.equalsIgnoreCase(cookieBlockList[j])) {
Cookie cookie = new Cookie(cookieName, "");
cookie.setMaxAge(0);
httpResponse.addCookie(cookies[i]);
}
}
}
}
filterChain.doFilter(request, response);
答案 0 :(得分:1)
您的代码中会创建一个新的Cookie,但它未被使用。将其添加到响应中(而不是cookies[i]
)。尝试设置Cookie的域以匹配请求中的域:
Cookie cookie = new Cookie(cookieName, "");
cookie.setDomain(cookies[i].getDomain());
cookie.setMaxAge(0);
httpResponse.addCookie(cookie);