HttpServletResponse添加cookie后,不生效

10 篇文章 0 订阅
2 篇文章 0 订阅

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("/");

参考

  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 8
    评论
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值