bro*_*eib 6 java cookies servlets http
如果我在将来设置一个带有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;
}
Run Code Online (Sandbox Code Playgroud)
为什么c.getMaxAge()总是返回-1?
Bal*_*usC 12
浏览器不会发送路径和年龄等cookie属性.它只返回名称和值.如果最大年龄已过期,则浏览器无论如何都不会发送cookie.如果路径未被请求URI覆盖,则浏览器无论如何都不会发送cookie.
如果您确实需要在设置cookie 后确定cookie的年龄,那么您应该在设置cookie时自己记住它,例如在数据库表中,与登录用户和cookie名称相关联, 例如.
此问题与Java/Servlet无关.这就是HTTP cookie的指定方式.您在其他Web编程语言中遇到了完全相同的问题.另见维基百科的以下摘录(强调我的).
Cookie属性
除了名称 - 值对,服务器还可以设置这些cookie属性:cookie域,路径,到期时间或最大年龄,Secure标志和HttpOnly标志.浏览器不会将cookie属性发送回服务器.他们只会发送cookie的名称 - 值对.浏览器使用Cookie属性来确定何时删除cookie,阻止cookie或是否向服务器发送cookie(名称 - 值对).
| 归档时间: |
|
| 查看次数: |
3650 次 |
| 最近记录: |