2009-10-21 54 views
0

我在我的项目中发现了一个奇怪的行为(对我来说很陌生,一个新手:D)。 基本上,在创建或更新cookie(如果存在或不存在)并将其发送给客户端的操作之后。奇怪的是,在jsp中,我只能在更新其值时读取cookie(并且我获取更新的值,而不是旧的值),但不是第一次,当我创建它时(我可以使用浏览器工具,但似乎jsp不能读取它)。 这是一个正常的行为?如果是的话,你还有什么建议可以在第一时间提供cookie信息?可在同一请求/响应中提供Cookie

非常感谢! Roberto

+0

你可以发布你用来设置和阅读cookie的代码吗? – pedromarce 2009-10-21 09:29:06

+0

改为: Cookie [] cookies = request.getCookies(); (cookies!) \t \t if(cookies!= NULL){ \t \t \t对(INT I = 0; I Roberto 2009-10-21 09:34:28

+0

我不确定明白问题所在。我假设你正在写你的jsp中的cookie,所以你有cookieObj可用(什么是新值),但你需要从那里读取它,显然它不会在请求中,直到进一步的请求。 – pedromarce 2009-10-21 09:47:38

回答

0

Cookie存储在客户端,所以如果响应没有到达客户端,它的值不会更新,但它应该在下一个请求中可用。

+0

没错,但是为什么在jsp中,当cookie已经存在时,我可以读取更新后的值?创建时的值无法读取(在更新代码中的相同位置) – Roberto 2009-10-21 09:31:59

+0

您应该在更新之前将该Cookie的前一个值分配给临时变量,否则您将不再获取原始值在它被更新之前。 – jerjer 2009-10-21 09:42:32

0

Cookie发送给您任何请求时用于识别客户端。这是当你设置cookie时你在做什么。您将cookie和响应一起发送给客户端。当客户发送下一个请求时,您设置的cookie随之一起发送。所以,在您设置cookie的jsp页面中,您没有使用cookie的客户端请求!所以你不能读它。但你可以像上面所说的那样做。 (即使用temp和存储cookie的值,并且不尝试检索cookie,只需读取temp值即可)。而且我看到你说你只能在更新时才能读取cookie。即使您没有更新cookie,您也可以在cookie设置后从将来的请求中读取cookie的值。希望这可以帮助。

2

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

我觉得你的问题是,你转发相同从servlet请求到JSP和你期望新的Cookie是在请求头已经可用。这不是真的。新的cookie仅在后续的请求中可用。

你有2种选择:

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

顺便说一下,我在其中一条评论中看到,您使用纯Java代码读取JSP中的cookie。我只会说在JSP中使用scriptlets是一种不好的的做法。您可以按照以下的EL轻松访问cookie值:

${cookie.cookiename.value} 

[编辑]噢,我的,现在我明白了,这是一个老话题。希望我的光芒并不都是没有的:/