我在我的項目中發現了一個奇怪的行爲(對我來說很陌生,一個新手: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