我在我的项目中发现了一个奇怪的行为(对我来说很陌生,一个新手:D)。 基本上,在创建或更新cookie(如果存在或不存在)并将其发送给客户端的操作之后。奇怪的是,在jsp中,我只能在更新其值时读取cookie(并且我获取更新的值,而不是旧的值),但不是第一次,当我创建它时(我可以使用浏览器工具,但似乎jsp不能读取它)。 这是一个正常的行为?如果是的话,你还有什么建议可以在第一时间提供cookie信息?可在同一请求/响应中提供Cookie
非常感谢! Roberto
我在我的项目中发现了一个奇怪的行为(对我来说很陌生,一个新手:D)。 基本上,在创建或更新cookie(如果存在或不存在)并将其发送给客户端的操作之后。奇怪的是,在jsp中,我只能在更新其值时读取cookie(并且我获取更新的值,而不是旧的值),但不是第一次,当我创建它时(我可以使用浏览器工具,但似乎jsp不能读取它)。 这是一个正常的行为?如果是的话,你还有什么建议可以在第一时间提供cookie信息?可在同一请求/响应中提供Cookie
非常感谢! Roberto
Cookie发送给您任何请求时用于识别客户端。这是当你设置cookie时你在做什么。您将cookie和响应一起发送给客户端。当客户发送下一个请求时,您设置的cookie随之一起发送。所以,在您设置cookie的jsp页面中,您没有使用cookie的客户端请求!所以你不能读它。但你可以像上面所说的那样做。 (即使用temp和存储cookie的值,并且不尝试检索cookie,只需读取temp值即可)。而且我看到你说你只能在更新时才能读取cookie。即使您没有更新cookie,您也可以在cookie设置后从将来的请求中读取cookie的值。希望这可以帮助。
如果您创建或更新cookie,它将存储在响应标题中。如果您请求cookie,将从请求标头中请求。
我觉得你的问题是,你转发的相同从servlet请求到JSP和你期望新的Cookie是在请求头已经可用。这不是真的。新的cookie仅在后续的请求中可用。
你有2种选择:
顺便说一下,我在其中一条评论中看到,您使用纯Java代码读取JSP中的cookie。我只会说在JSP中使用scriptlets是一种不好的的做法。您可以按照以下的EL轻松访问cookie值:
${cookie.cookiename.value}
[编辑]噢,我的,现在我明白了,这是一个老话题。希望我的光芒并不都是没有的:/
你可以发布你用来设置和阅读cookie的代码吗? – pedromarce 2009-10-21 09:29:06
改为: Cookie [] cookies = request.getCookies(); (cookies!) \t \t if(cookies!= NULL){ \t \t \t对(INT I = 0; I
Roberto
2009-10-21 09:34:28
我不确定明白问题所在。我假设你正在写你的jsp中的cookie,所以你有cookieObj可用(什么是新值),但你需要从那里读取它,显然它不会在请求中,直到进一步的请求。 – pedromarce 2009-10-21 09:47:38