2009-11-03 63 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而不是字符串之一。