gpt4 book ai didi

java - 在Java Servlet中,cookie.getMaxAge()始终返回-1

转载 作者:行者123 更新时间:2023-12-01 23:15:54 24 4
gpt4 key购买 nike

如果将来我使用setMaxAge()设置cookie,那么当我在后续请求中将cookie读回内存时,getMaxAge()会返回-1。我已经通过Chrome的设置和检查器检查了实际的cookie,并且可以验证有效期限是否确实设置为将来的60天。

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。如果该路径未包含在请求URI中,则浏览器无论如何都不会发送cookie。
如果您确实需要在设置cookie后确定cookie的年龄,那么在设置cookie的那一刻(例如在数据库表中),它应该与登录用户和cookie名称相关联,并在其他地方记住它。 , 例如。
这个问题与Java / Servlet无关。这就是指定HTTP Cookie的方式。在其他Web编程语言中,您将遇到完全相同的问题。另请参见Wikipedia中的以下摘录(强调我的)。

Cookie属性
除了名称/值对之外,服务器还可以设置以下cookie属性:cookie域,路径,到期时间或最长期限,安全标志和HttpOnly标志。浏览器不会将cookie属性发送回服务器。他们只会发送Cookie的名称/值对。浏览器使用cookie属性来确定何时删除cookie,阻止cookie或是否将cookie(名称/值对)发送到服务器。

关于java - 在Java Servlet中,cookie.getMaxAge()始终返回-1,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58352880/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com