response.addCookie(cookie)不生效
问题:
本来想写一个简单的登陆验证流程,但是写完后发现就是实现不了。
于是就跟踪了下流程,发现HttpServletResponse添加cookie后,不生效,在前端根本就没有这个cookie。
实现代码
以下是服务层代码
@Override
public boolean login(User user, HttpServletRequest request,HttpServletResponse response) {
User result = userMapper.login(user);
if(result!=null) {//账号密码正确
user = result;
//保存登陆信息
String token = LoginUtil.put(result);
//将token添加到cookie
Cookie cookie = new Cookie("token", token);
response.addCookie(cookie);
return true;
}else {
return false;
}
}
控制层代码
/**
* 用户登陆
* @param model
* @return
* @throws Exception
*/
@PostMapping("/login")
@ResponseBody
public R login(@ModelAttribute User user,HttpServletRequest request,HttpServletResponse response) throws Exception {
boolean suc=false;
String msg = "";
systemLog.setCreatetime(new Date());
try {
if(user.getPassword()!=null) {
user.setPassword(MyMD5Util.encrypt(user.getPassword()));
}
suc = userService.login(user,request,response);
if (suc) {
msg = "登陆成功";
} else {
msg = "账号或密码错误,请重新输入";
}
} catch (Exception e) {
msg = e.getMessage();
e.printStackTrace();
}
systemLog.setAction("用户登陆");
systemLog.setEndtime(new Date());
systemLog.setRemark(msg);
systemLogService.save(systemLog);// 保持日志
String token = LoginUtil.getToken(user);
if(suc) {
return R.success(msg, token);
}else {
return R.error(msg, user);
}
}
相关知识
查了下Cookie的相关知识
下面是在网上学习一番后得到的总结(如有纰漏请指正):
1.domain表示的是cookie所在的域,默认为请求的地址,如网址为www.test.com/test/test.aspx,那么domain默认为www.test.com。而跨域访问,如域A为t1.test.com,域B为t2.test.com,那么在域A生产一个令域A和域B都能访问的cookie就要将该cookie的domain设置为.test.com;如果要在域A生产一个令域A不能访问而域B能访问的cookie就要将该cookie的domain设置为t2.test.com。
2.path表示cookie所在的目录,asp.net默认为/,就是根目录。在同一个服务器上有目录如下:/test/,/test/cd/,/test/dd/,现设一个cookie1的path为/test/,cookie2的path为/test/cd/,那么test下的所有页面都可以访问到cookie1,而/test/和/test/dd/的子页面不能访问cookie2。这是因为cookie能让其path路径下的页面访问。
3.浏览器会将domain和path都相同的cookie保存在一个文件里,cookie间用*隔开。
4.含值键值对的cookie:以前一直用的是nam=value单键值对的cookie,一说到含多个子键值对的就蒙了。现在总算弄清楚了。含多个子键值对的cookie格式是name=key1=value1&key2=value2。可以理解为单键值对的值保存一个自定义的多键值字符串,其中的键值对分割符为&,当然可以自定义一个分隔符,但用asp.net获取时是以&为分割符。
原因
path未正确设置。
解决
添加path设置
cookie.setPath("/");
最后
以上就是痴情白羊最近收集整理的关于记住密码后端response.addCookie(cookie)不生效response.addCookie(cookie)不生效 问题:的全部内容,更多相关记住密码后端response.addCookie(cookie)不生效response.addCookie(cookie)不生效内容请搜索靠谱客的其他文章。
发表评论 取消回复