更新:我尝试在浏览器中清除已创建的Cookie并再次尝试,但事情并未发生。可以想象我在某个时候设置了一个值为“null”的cookie。
(好吧,这可能是一个反复的问题,所以我正在制作CW)
Google Web Toolkit的文档说明了Cookie.getCookie:
public static java.lang.String getCookie(java.lang.String name)
获取与给定名称关联的cookie。
参数:
- 名称 - 要检索的Cookie的名称
返回:
- cookie的值,如果cookie不存在,则为null
好吧,我刚刚花了好几个小时撞墙,因为至少在托管模式浏览器中(我还没有用真正的浏览器进行测试),它不会返回 null ,它返回“null”,即文字字符串,长度为4个字符,以“n”开头。
如果将它们打印出来,null和“null”看起来非常相似,但只有一个响应if (cookie == null) Cookies.setCookie(cookie, newValue);
谷歌是这样做的,或者有人只是把我搞砸了,是否有任何可以想象的理由?
答案 0 :(得分:1)
你确定没有将cookie设置为“null”的值吗?您应该查看响应中的标题,以确保。根据GWT的版本,这可以通过不同的方式实现 - 最简单的可能是“编译”并尝试使用真正的浏览器,它们可以轻松查看标题。
答案 1 :(得分:1)
我能理解你的头痛(我刚刚发布了关于gwt cookie文档的错误:http://code.google.com/p/google-web-toolkit/issues/detail?id=387&can=1)
您使用的是哪个版本的GWT?
你测试过哪种浏览器?
我只是看了1.6.4的代码(它们发布了源代码),我建议你把它作为一个bug提交。请参阅问题2994以了解其中的内容,但我认为这与其自身的错误备案有所不同。
看起来GWT以不同的方式处理散列图(出于性能原因?)而不是常规的散列图;解压缩gwt-user.jar文件时,请参阅com / google / gwt / emul目录中的java.util.AbstractHashMap。这是get()强制执行。
return (key == null) ? nullSlot : (!(key instanceof String) ? getHashValue(
key, getHashCode(key)) : getStringValue((String) key));
也许这就是问题所在。
希望这有帮助。
丹
答案 2 :(得分:1)
我认为设置cookie null会使cookie的值为“null”(String) 您应该使用Cookies.removeCookie(“CookieName”)删除cookie,该Cookie应该删除cookie并且您的查询将返回真正的null而不是字符串1。
答案 3 :(得分: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);