Cookie在同一请求/响应中可用

时间:2009-10-21 09:18:15

标签: java jsp cookies

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

非常感谢! 罗伯特

3 个答案:

答案 0 :(得分:2)

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

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

您有两个选择:

  1. 重定向到JSP。重定向将创建请求。
  2. 将感兴趣的数据存储为请求属性,让JSP中的EL访问它。
  3. 顺便说一下,我在你的一条评论中看到你使用普通的Java代码来读取JSP中的cookie。我只想说在JSP中使用 scriptlets 是一种糟糕的做法。您可以在EL中轻松访问cookie值,如下所示:

    ${cookie.cookiename.value}
    

    [编辑]哦,我的,现在我看到这是一个主题。希望我的力量并非一无所获:/

答案 1 :(得分:0)

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

答案 2 :(得分:0)

Cookie用于在向客户发送任何请求时识别客户。这是你设置cookie时你正在做的事情。您将cookie与响应一起发送给客户端。当该客户端发送他的下一个请求时,您设置的cookie随之出现。所以,在你设置cookie的jsp页面中,你没有来自客户端的cookie请求!所以你无法阅读它。但你可以做什么,就像jerjer上面所说的那样。 (即使用temp和store cookie的值,不要尝试检索cookie。只需读取临时值)。我看到你说你只有在更新时才能读取cookie。即使您没有更新cookie,您也可以在设置cookie后从未来的请求中读取cookie的值。希望这会有所帮助。