tags:

views:

305

answers:

3

Hi All, I have found a strange behaviour (strange for me, a novice :D) in my project. Basicly after an action I create or update a cookie (if it exists or not) and send it to the client. The strange thing is that in the jsp I can read the cookie ONLY when I update its value (and I get the updated value, not the old one) but not the first time, when I create it (I can see the cookie using a browser tool but seems that the jsp can't read it). Is this a normal behaviour? If yes, what do you suggest to do in order to have the cookie information available also at the first time?

Thanks very much! Roberto

A: 

Cookies are stored on client, and so if the response doesn't gets to the client yet, its value is not updated, but it should be available on the next requests.

jerjer
right, but why in the jsp I can read the updated value when the cookie already exists? I can't read the value when it is created (at the same point in the code of the update)
Roberto
You should assign the previous value of the cookie to a temporary variable before it gets updated otherwise, you will no longer get original value before it gets updated.
jerjer
A: 

cookies are used to identify clients when they send you any requests. here's what you are doing when you set the cookie up. you are sending the cookie to the client along with response. And when that client send his next request the cookie that you set comes along with it. so, in the jsp page where you are setting up the cookie, you don't have a request from the client with cookie! so you can't read it. but what you can do like what jerjer has said above. (i.e use a temp and store cookie's value in it and don't try to retrieve cookie. just read the temp value). And i see you say you can read the cookie only when you update. You will be able to read cookie's value from future reqests after cookie is set even if you don't update it. Hope this helps.

tony_le_montana
A: 

If you create or update a cookie, it will be stored in the response header. If you request a cookie, it will be requested from the request header.

I think your problem is that you're forwarding the same request from servlet to JSP and that you expect that the new cookie is already available in the request header. This is not true. The new cookie is only available in the subsequent requests.

You have 2 options:

  1. Redirect to JSP. A redirect will create a new request.
  2. Store the data of interest as request attribute and let EL in JSP access it.

By the way, I saw in one of your comments that you're using plain Java code to read cookies in a JSP. I would only say that using scriptlets in JSP is a bad practice. You can access cookie values easily in EL as follows:

${cookie.cookiename.value}

[Edit] oh my, now I see that this is an old topic. Hopefully my effors weren't all for nothing :/

BalusC