【问题标题】:Cookie available in the same request/responseCookie 在同一请求/响应中可用
【发布时间】:2009-11-08 02:50:53
【问题描述】:

我在我的项目中发现了一个奇怪的行为(对我来说很奇怪,一个新手 :D)。 基本上在一个动作之后我创建或更新一个 cookie(如果它存在或不存在)并将它发送给客户端。奇怪的是,在 jsp 中,我只能在更新它的值时读取 cookie(并且我得到更新的值,而不是旧值),但不是第一次创建它时(我可以使用浏览器工具,但似乎jsp无法读取它)。 这是正常行为吗?如果是,您建议如何在第一时间获得 cookie 信息?

非常感谢! 罗伯托

【问题讨论】:

  • 你能贴出你用来设置和读取cookie的代码吗?
  • 阅读:Cookie [] cookies = request.getCookies(); if (cookies!=null){ for(int i=0;i
  • 我不确定是什么问题。我假设您正在 jsp 中编写 cookie,因此您有 cookieObj 可用(新值是什么),但您需要从那里读取它,显然它不会在请求中,直到进一步请求。跨度>

标签: java jsp cookies


【解决方案1】:

如果您创建或更新 cookie,它将存储在响应标头中。如果您请求 cookie,它将从请求标头中请求。

我认为您的问题是您将 转发 相同 请求从 servlet 到 JSP,并且您希望新 cookie 已经在请求标头中可用。这不是真的。新 cookie 仅在后续请求中可用。

你有两个选择:

  1. 重定向到 JSP。重定向将创建一个 new 请求。
  2. 将感兴趣的数据存储为请求属性,让JSP中的EL访问它。

顺便说一句,我在您的一个 cmets 中看到您正在使用纯 Java 代码来读取 JSP 中的 cookie。我只会说在 JSP 中使用 scriptlets 是一种不好的 做法。您可以在 EL 中轻松访问 cookie 值,如下所示:

${cookie.cookiename.value}

[Edit] 哦,我的天,现在我发现这是一个 话题了。希望我的努力不是白费的:/

【讨论】:

    【解决方案2】:

    Cookie 存储在客户端,因此如果响应尚未到达客户端,则其值不会更新,但它应该在下一次请求时可用。

    【讨论】:

    • 对,但是为什么在 cookie 已经存在时我可以在 jsp 中读取更新的值?创建时我无法读取值(在更新代码的同一点)
    • 您应该在更新之前将cookie的先前值分配给临时变量,否则,您将不再获得更新之前的原始值。
    【解决方案3】:

    cookies 用于在客户向您发送任何请求时对其进行识别。这是您设置 cookie 时所做的事情。您将 cookie 连同响应一起发送给客户端。当该客户端发送他的下一个请求时,您设置的 cookie 随之而来。因此,在您设置 cookie 的 jsp 页面中,您没有来自客户端的带有 cookie 的请求!所以你无法阅读它。但是你可以像上面所说的那样做。 (即使用临时并将cookie的值存储在其中,不要尝试检索cookie。只需读取临时值)。我看到你说你只能在更新时读取 cookie。设置 cookie 后,即使您不更新它,您也可以从未来的请求中读取 cookie 的值。希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2020-03-10
      • 1970-01-01
      • 2018-03-16
      • 2019-12-24
      • 2014-12-02
      • 1970-01-01
      • 2019-04-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多