static public void setHttpCookie(HttpServletResponse response, String payload) {
Cookie c = new Cookie(COOKIE_NAME, payload);
c.setMaxAge(60*86400); // expire sixty days in the future
c.setPath("/"); // this cookie is good everywhere on the site
response.addCookie(c);
}
static public String checkForCookie(HttpServletRequest req) {
Cookie[] cookies = req.getCookies();
if ( cookies != null ) {
for ( Cookie c : cookies ) {
if ( COOKIE_NAME.equals(c.getName()) ) {
int maxAge = c.getMaxAge();
logger.debug("Read back cookie and it had maxAge of {}.", maxAge);
String payload = c.getValue();
return payload;
}
}
}
return null;
}
为什么c.getMaxAge()总是返回-1?
如果您确实需要在设置 Cookie 后
确定 Cookie 的年龄,那么您应该在设置 Cookie 时自己在其他地方记住它,例如在与登录用户关联的数据库表中和 cookie 名称,例如。 这个问题与Java/Servlet无关。这就是 HTTP cookie 的指定方式。在其他网络编程语言中你也会遇到完全相同的问题。另请参阅以下来自
维基百科Cookie 属性除了名称-值对之外,服务器还可以设置这些 cookie 属性:cookie 域、路径、过期时间或最大期限、安全标志和 HttpOnly 标志。
浏览器不会将 cookie 属性发送回服务器。他们只会发送 cookie 的名称-值对。浏览器使用 Cookie 属性来确定何时删除 Cookie、阻止 Cookie 或是否向服务器发送 Cookie(名称-值对)。
您能做的最好的事情就是每次都增加 cookie 的最大年龄。登录。您可以通过再次设置完全相同的 cookie(尤其是完全相同的域/路径/名称)轻松实现此目的。它将覆盖现有的 cookie。这通常是通过所谓的“记住我”cookie 来完成的。