2009-10-21 42 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} 

[編輯]噢,我的,現在我明白了,這是一個老話題。希望我的光芒並不都是沒有的:/

相關問題