【问题标题】:Expiring a cookie when sending a redirect response not working发送重定向响应不起作用时使 cookie 过期
【发布时间】:2011-12-07 19:56:55
【问题描述】:

我正在尝试使安全访问的 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/空字符串,以及另一个值,但它永远不会改变。如果重要的话,所有的服务器端代码都是用 Java 完成的。

非常感谢您的帮助。

【问题讨论】:

标签: java redirect cookies


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-01-22
        • 1970-01-01
        • 2016-01-15
        • 2018-09-13
        • 1970-01-01
        相关资源
        最近更新 更多