【Cookie】后端在Response中addCookie无效(请求中已有Set-Cookie)

本文讲述了前端通过后端接口设置Cookie时,遇到响应正确但浏览器异常的问题,原因在于后端设置了secure属性为true。解决方法是移除secure并调整httpOnly。最终,当后端接口重新调用并设置httpOnly为默认时,Cookie在浏览器中正常显示。
摘要由CSDN通过智能技术生成

【问题现象】

在前端访问后端接口,后端通过Response来设置Cookie时(代码如下),并没有产生效果:

public static Cookie buildCookie(String name, String value, int maxAge, String domain) {
		Cookie cookie = new Cookie(name, value);
		cookie.setSecure(true);
		cookie.setHttpOnly(true);
		cookie.setPath("/");
		if (maxAge != 0) {
			cookie.setMaxAge(maxAge);
		}
		if (domain != null && !"".equalsIgnoreCase(domain)) {
			cookie.setDomain(domain);
		}
		return cookie;
	}

![在这里插入图片描述](https://img-blog.csdnimg.cn/4985bce9843249f6bee3abdd5b783e1b.png
在这里插入图片描述
在前端浏览器开发者模式中,观察接口(该后端接口负责种Cookie)请求结果如下,Response中Set-Cookie内容正确,但出现异常标记,如图:在这里插入图片描述
同时查看Cookie页,也为异常黄色,同时有相应secure提示,如图:
在这里插入图片描述

【原因】

原因非常简单,我们会发现这种情况只会在http请求中发生,是因为后端在种cookie时,设置了secure为true。
若secure为true,表示创建的cookie只能在HTTPS连接中被浏览器传递到服务器端,进行会话验证,如果是HTTP连接则不会传递该信息,所以安全性更高,不会被窃听。具体如下:

如果HTTP连接在setSecure(true) 的情况下,只有服务器端的cookie会传递到浏览器端,浏览器端的cookie不会传递到服务器端;同时浏览器端收到服务器端的cookie,也不会自动写入。

【解决】

解决比较容易,后端种cookie时,不要设置secure为true;另外,如果只有http连接,同时浏览器端也需要使用cookie中内容,则需要把httpOnly改为false,否则浏览器端会被限制获取和使用cookie。
如下:

	public static Cookie buildCookie(String name, String value, int maxAge, String domain) {
		Cookie cookie = new Cookie(name, value);
//		cookie.setSecure(true);
		//如果只有http连接,同时浏览器端也需要使用cookie中内容,则需要把httpOnly改为false,否则浏览器端会被限制获取和使用cookie
//		cookie.setHttpOnly(true);
		cookie.setPath("/");
		if (maxAge != 0) {
			cookie.setMaxAge(maxAge);
		}
		if (domain != null && !"".equalsIgnoreCase(domain)) {
			cookie.setDomain(domain);
		}
		return cookie;
	}

在这里插入图片描述

重新启动,调用种cookie接口后,一切正常:
在这里插入图片描述
在这里插入图片描述
同时也能在cookie管理器中看到该cookie:
在这里插入图片描述

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

猿人林克

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值