我正在尝试使安全访问的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完成的。
非常感谢帮助。
答案 0 :(得分:1)
您是否尝试过确保无效Cookie的域和路径与原始Cookie相同?
此外,处理敏感cookie的更好方法是在原始cookie上设置“secure”标志。这将告诉浏览器永远不会通过不安全的连接发送cookie。
答案 1 :(得分:1)
这对我来说是一种疏忽。当Servlet B使Cookie XX无效时,它还将cookie的路径设置为不同于原来的路径。实际上,这创建了Cookie XX-B并且对原始Cookie XX没有影响。确保我的cookie的路径是相同的修复它。
答案 2 :(得分:0)
在两个单独的项目中,我不得不使cookie无效。这是我必须要做的:
Cookie.setMaxAge(int)
将cookie的最长使用期限设置为。Cookie.setPath(String)
方法,即使路径保持不变 HttpServletRespons.addCookie(cookie)
仅在执行了上述所有步骤之后,浏览器才停止在后续请求中将cookie传递回服务器。