GWT Cookies.getCookie返回;空";

GWT Cookies.getCookie返回;空";,gwt,cookies,Gwt,Cookies,更新:我尝试在浏览器中清除创建的cookie并重试,但没有成功。可以想象,我在某个时刻设置了一个值为“null”的cookie (好的,这可能是一个反驳性的问题,所以我把它改成CW) Google Web Toolkit的文档说明了有关Cookie.getCookie的内容: 公共静态java.lang.String获取cookie(java.lang.String名称) 获取与给定名称关联的cookie 参数: 名称-要检索的cookie的名称 返回: cookie的值,如果cookie

更新:我尝试在浏览器中清除创建的cookie并重试,但没有成功。可以想象,我在某个时刻设置了一个值为“null”的cookie

(好的,这可能是一个反驳性的问题,所以我把它改成CW)

Google Web Toolkit的文档说明了有关Cookie.getCookie的内容:

公共静态java.lang.String获取cookie(java.lang.String名称)

获取与给定名称关联的cookie

参数:

  • 名称-要检索的cookie的名称
返回:

  • cookie的值,如果cookie不存在,则为null
好吧,我已经花了好几个小时的时间把头撞在墙上,因为至少在托管模式浏览器中(我还没有用真正的浏览器测试),它不会返回null,它会返回“null”,即文本字符串,4个字符长,以“n”开头

如果打印出来,null和“null”看起来非常相似,但只有一个响应
if(cookie==null)Cookies.setCookie(cookie,newValue)


谷歌这样做有什么可以想象的原因吗,或者有人只是在耍我?

也许尝试一个持续时间可以改变这种情况。试试这个:

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);

您确定没有将cookie设置为“null”值吗?您应该查看响应上的标题,以确保。根据GWT版本的不同,这可能有不同的方式——最简单的方法可能是点击“编译”并尝试真正的浏览器,这样可以很容易地看到标题。

我可以理解您的头痛(我不久前发布了一个关于GWT cookie文档的错误:)

您正在使用哪个版本的GWT

您在哪个浏览器中测试

我刚刚查看了1.6.4的代码(他们提供了源代码),我鼓励您将其作为bug归档。请参阅2994期,了解一些相关信息,但我认为这已经足够不同,足以证明它自己的bug文件

看起来GWT处理哈希映射的方式(出于性能原因?)与处理常规哈希映射的方式不同;解包gwt-user.jar文件时,请参阅com/google/gwt/emul目录中的java.util.AbstractHashMap。下面是get()的实现

return(key==null)?nullSlot:(!(字符串的键实例)?getHashValue(
键,getHashCode(键)):getStringValue((字符串)键));
也许这就是问题所在

希望这有帮助


Dan

我认为将cookie设置为null会使cookie的值为“null”(字符串)
您应该删除带有cookie的cookie。removeCookie(“CookieName”)应该删除cookie,您的查询将返回真正的null而不是字符串。

我的观点是,我没有设置cookie,getCookie返回字符串“null”而不是像文档中强烈暗示的实际空值。这发生在我有setCookie代码之前-我只是想知道为什么我的“cookie生成”代码没有被执行。不幸的是,这似乎只发生在托管模式浏览器上,我不知道如何清除该浏览器上的cookie以测试问题。您可以通过使cookie过期来从客户端删除它。-您还可以列出cookies客户端,查看其中的内容。