Cookie cookie = new Cookie(“user”, "test");
cookie.setMaxAge(60*60*24);
cookie.setPath("/");
response.addCookie(cookie);
这样设置并且添加之后,在浏览器中 查看cookie时 显示的 到期时间 是 浏览会话结束
你把你查看浏览器cookie中某个属性的有效时间截图看下吧。如果清理了浏览器缓存或者关闭了浏览器都会导致cookie失效。
“到期”对应的是cookie的expires字段,不是maxage。你截图显示的是默认值。
看起来浏览器根本没取后端设置的cookie。
你是测试环境吗?把后台服务重启一下,浏览器的cookie全部清除并关闭,然后再试一次?
你看cookie类有setExpires方法吗?如果没有就必须手动写response的header。
但设置maxage就够了,一般不用设expires,maxage的优先级是高于expires的。
你测试过了吗?关闭浏览器再打开,新的请求是否带着cookie访问?
f12看network的response呢,有没有带着cookie正确返回浏览器?
我仔细看了你贴的代码,貌似双引号不对,编译过了吗?
我试了一下,程序按下面这样实现是没问题,f12看response是成功的。
用chrome关掉浏览器再访问,cookie也在。
只有firefox有问题,原因是firefox默认配置中,关闭浏览器清空所有cookie,把这个选项去掉也就好了。
package com.example.demo.controller;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletResponse;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.CookieValue;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;
@Controller
@RequestMapping("/")
public class MyController {
@RequestMapping("/cookie")
@ResponseBody
public String test(HttpServletResponse response) {
Cookie cookie = new Cookie("user", "test");
cookie.setMaxAge(60 * 60 * 24);
cookie.setPath("/");
response.addCookie(cookie);
return "set cookie";
}
@RequestMapping("/request")
@ResponseBody
public String test(@CookieValue("user") String user) {
return "cookie value: " + user;
}
}
Cookie cookie = new Cookie(“user”, "test"); //这里了user引号用成中文了
Cookie cookie = new Cookie("user", "test"); //改成这个