2009-11-03 33 views
4

更新:我嘗試在瀏覽器中清除所創建的cookie並再次嘗試,並且沒有發生。可以想象,我在某個時候設置了一個值爲「null」的cookie。GWT Cookies.getCookie返回「null」

(好吧,這可能是一個問題retorical,所以我做它CW)

的谷歌Web工具包的文件說,這大約Cookies.getCookie:

公共靜態Java。 lang.String getCookie(java.lang.String name)

獲取與給定名稱關聯的cookie。

參數:

  • - cookie的名稱進行檢索

返回:

  • cookie的值或null如果cookie不存在

嗯,我剛剛花了好幾個小時在牆上敲打我的頭,因爲至少在託管模式瀏覽器(我還沒有用真正的瀏覽器進行測試),它不返回null,它返回「null」,即文字串,長度爲4個字符,以「n」開頭。

null和「空」看,如果你把它們打印出來驚人的相似,但只有一個響應一個if (cookie == null) Cookies.setCookie(cookie, newValue);

是否有任何可能的原因,谷歌這樣做的,或者是有人剛剛擰我身邊?

回答

1

我能理解你的頭痛(我發佈了關於GWT的cookie文件錯誤前一陣子:http://code.google.com/p/google-web-toolkit/issues/detail?id=387&can=1

GWT哪個版本您使用的?

您測試過哪個瀏覽器?

我剛剛看了1.6.4的代碼(他們提供了源代碼),我鼓勵你把這個文件作爲一個bug。請參閱問題2994以瞭解更多內容,但我認爲這不同於對自己的bug提交的警告。

它看起來像GWT以不同的方式處理hashmaps(出於性能原因?)比常規hashmaps;請參閱java.util。當您解壓gwt-user.jar文件時,com/google/gwt/emul目錄下的AbstractHashMap。這是get()推進。

return (key == null) ? nullSlot : (!(key instanceof String) ? getHashValue(
    key, getHashCode(key)) : getStringValue((String) key)); 

也許這是問題所在。

希望這會有所幫助。

0

也許嘗試一段時間可以改變這種情況。試試這個:

Date now = new Date(); 
long nowLong = now.getTime(); 
nowLong = nowLong + (1000 * 60 * 60 * 24 * 7);//seven days 
now.setTime(nowLong); 

Cookies.setCookie("sampleCookieName", "sampleCookiValue", now); 
+0

我的觀點是我沒有設置cookie,並且getCookie返回字符串「null」而不是真正的null值,如文檔強烈暗示的那樣。 – 2009-11-03 21:49:47

1

你確定沒有設置cookie值爲「null」嗎?您應該查看響應中的標題,以確保。根據GWT的版本,這可能有不同的方式 - 最簡單的方法是點擊「編譯」並嘗試一個真正的瀏覽器,它們可以很容易地看到標題。

+0

這發生在我有setCookie代碼之前 - 我只是想知道爲什麼我的「cookie生成」代碼沒有得到執行。不幸的是,它似乎只發生在託管模式瀏覽器上,我不知道如何清除該瀏覽器上的cookie來測試問題。 – 2009-11-05 16:26:42

+0

您可以通過使客戶端過期來刪除cookie。 http://blogs.x2line.com/al/articles/316.aspx - 您還可以列出cookie客戶端,看看有什麼。 – user136776 2009-11-06 11:50:44

1

我想設置一個cookie空使得曲奇「空」(串)的值 您應該刪除的cookie Cookies.removeCookie(「CookieName」),這應該刪除cookie和查詢將返回真正的null而不是字符串之一。