GWT Cookies.getCookie返回“null”

时间:2009-11-03 13:00:55

标签: gwt cookies

更新:我尝试在浏览器中清除已创建的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);

谷歌是这样做的,或者有人只是把我搞砸了,是否有任何可以想象的理由?

4 个答案:

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