发送重定向响应无效时,使Cookie失效

时间:2011-12-07 19:56:56

标签: java redirect cookies

我正在尝试使安全访问的servlet中的不安全cookie失效/过期,并将重定向发送回客户端。但是,当遵循重定向时,请求仍然包含原始的,未到期的,未经验证的(是一个单词)cookie。

以下是对流程的更详细描述:
1)客户端请求由Servlet A支持的特定不安全URL 2)Servlet A检测到有一个Cookie XX并重定向到由Servlet B支持的安全URL 3)Servlet B发挥其魔力,然后通过将MaxAge设置为0使Cookie XX无效,并通过不安全的URL重定向到Servlet A.
4)在Servlet A中,我仍然可以像第一次请求一样访问cookie。

任何人都可以伸出援手吗?我受到了印象,并且无法找到相反的证据,即当使用重定向响应发回cookie时,仍会在发出新请求之前对其进行处理。这种情况发生在我可以访问的所有浏览器(Chrome,FF,IE)中,因此我认为它不是浏览器。在HTTPFox和Chrome开发者工具中,我可以看到在第一个和第二个请求中发送的原始cookie,在第二个请求的响应中返回的无效cookie,以及在第三个请求中再次发送原始cookie。我已经尝试将MaxAge设置为0,将cookie的值设置为null / empty字符串,以及另一个值但它永远不会更改。如果重要的话,所有服务器端代码都是用Java完成的。

非常感谢帮助。

3 个答案:

答案 0 :(得分:1)

您是否尝试过确保无效Cookie的域和路径与原始Cookie相同?

此外,处理敏感cookie的更好方法是在原始cookie上设置“secure”标志。这将告诉浏览器永远不会通过不安全的连接发送cookie。

答案 1 :(得分:1)

这对我来说是一种疏忽。当Servlet B使Cookie XX无效时,它还将cookie的路径设置为不同于原来的路径。实际上,这创建了Cookie XX-B并且对原始Cookie XX没有影响。确保我的cookie的路径是相同的修复它。

答案 2 :(得分:0)

在两个单独的项目中,我不得不使cookie无效。这是我必须要做的:

  1. 从HTTP请求对象中获取有问题的Cookie
  2. 通过调用Cookie.setMaxAge(int)将cookie的最长使用期限设置为。
  3. 调用Cookie.setPath(String)方法,即使路径保持不变
  4. 将Cookie重新添加到HTTP响应对象中,即HttpServletRespons.addCookie(cookie)

仅在执行了上述所有步骤之后,浏览器才停止在后续请求中将cookie传递回服务器。