如果在GWT中设置超时=30天,为什么不存储Cookie?

如果在GWT中设置超时=30天,为什么不存储Cookie?,gwt,Gwt,这很奇怪。好的,下面的代码可以正常工作 public void setCookie(String cookiesName, String cookiesValue){ final int COOKIE_TIMEOUT = 1000 * 60 * 60 * 24;//1 days Date expires = new Date((new Date()).getTime() + COOKIE_TIMEOUT); Cookies.setCookie(cookiesName, c

这很奇怪。好的,下面的代码可以正常工作

public void setCookie(String cookiesName, String cookiesValue){
    final int COOKIE_TIMEOUT = 1000 * 60 * 60 * 24;//1 days
    Date expires = new Date((new Date()).getTime() + COOKIE_TIMEOUT);
    Cookies.setCookie(cookiesName, cookiesValue, expires);
}
//then
setCookie("currentLang","de");
Collection<String> cookies = Cookies.getCookieNames();
for(String cookie : cookies){
        if("currentLang".equals(cookie)){
              System.out.println("got currentlang");
        }
}
public void setCookie(字符串cookiesName,字符串cookiesValue){
最终整数COOKIE_超时=1000*60*60*24;//1天
日期过期=新日期((新日期()).getTime()+COOKIE\u超时);
setCookie(cookiesName、cookiesValue、expires);
}
//然后
setCookie(“currentLang”、“de”);
收集cookies=cookies.getCookieNames();
用于(字符串cookie:cookies){
if(“currentLang”.equals(cookie)){
System.out.println(“got currentlang”);
}
}
如果我运行上面的代码,那么我可以看到输出:“得到currentlang” 但是,如果我设置timeout=30天
final int COOKIE\u timeout=1000*60*60*24*30//30天
,然后什么也没有打印出来,所以如果我们设置30天,“currentLang”甚至没有被存储


为什么呢?Gwt会阻止这种情况发生吗?

您正在对溢出超过整数最大正值的和使用整数算术。所以1000*60*60*24*30是负数


您可以尝试1000L*60*60*24*30

u表示最终长COOKIE\u超时=1000L*60*60*24*30//30天?ti是有效的,但是为什么我们必须把L放在1000之后,如果我不把L放在1000之后,那么它就不起作用了。1000l被解释为一个值为1000的长,所以乘法都将作为一个长而不是整数来完成。