问题描述
在我们业务中,采用了服务端设置cookie 作为登录的方案;
在本地开发阶段,cookie的设置均正常。
项目部署之后,服务端设置的cookie无法正常使用
项目的前端部署在 https://fe.fanyue.com/
项目服务端部署在 https://be.fanyue.com/
服务端发送的cookie,在请求中正确返回,但后续的接口请求中,前端无法携带cookie信息。
cookie
当用户浏览网页时,网站存储在用户电脑上的一小段文本信息。它由Web服务器创建,并发送给用户的Web浏览器,浏览器将这些信息保存在本地,以供该网站后续使用。
Cookie的主要作用是记录用户的浏览活动和偏好设置。例如,它可以记录用户的登录信息,使得用户在下次访问同一网站时无需再次输入用户名和密码;它可以记录用户在电商网站购物车中的商品,即便用户关闭网页后再回来,之前的商品仍然在购物车中等。
虽然Cookie为用户带来了便利,但也引发了隐私保护的担忧。因为它能够追踪用户的上网行为,所以一些用户担心自己的隐私可能会因此泄露。为此,很多国家和地区都出台了相关的法律法规,要求网站在使用Cookie时必须遵循透明原则,告知用户网站将如何使用Cookie,并给予用户选择是否接受Cookie的权利。
问题定位
chrome的浏览器的安全沙箱规则阻止了cookie的转发。
Chrome浏览器阻止Cookie转发主要是为了增强用户隐私保护和防止跨站追踪。其原因大概有如下几点
-
隐私保护:第三方Cookie由与用户当前访问的网站不同的域创建,它们通常用于广告和数据分析,以追踪用户在不同网站之间的活动。阻止第三方Cookie有助于减少用户在线活动的追踪,从而保护用户的隐私。
-
跨站追踪:第三方Cookie可以用于跨站追踪,即追踪用户在多个网站上的行为。这可能导致用户收到针对性的广告,也可能使敏感信息暴露给不必要的第三方。
-
用户控制:提供阻止第三方Cookie的选项,可以让用户对自己的在线数据和隐私有更多的控制权。用户可以根据自己的偏好来决定是否允许第三方Cookie。
-
法律和规定:随着对数据隐私的关注日益增加,许多国家和地区都出台了相关的法律法规,要求网站和浏览器尊重用户的隐私权。例如,欧盟的通用数据保护条例(GDPR)就对Cookie的使用提出了明确的要求。
-
安全性:减少第三方Cookie的使用可以降低潜在的安全风险,因为某些恶意网站可能会利用第三方Cookie来执行恶意代码或窃取用户信息。
解决方案
需要前后端一起配合解决
前端:
在请求中,增加 withCredentials 配置,以控制在发送请求时是否携带cookie;
这项配置需要应用在跨域资源请求中,涉及跨域,那就需要服务器正确配置跨域策略;否则前端这项配置无法生效。
// 以axios为例
axios.defaults.withCredentials = true
服务端:
如果服务器没有正确配置CORS策略,即使设置了
withCredentials为true,浏览器也不会发送Cookie。服务端配置信息,有两部分,一部分是cookie的属性和配置;另一部分就是接口跨域的配置;
服务器必须显式允许来自特定源的请求通过设置CORS的
Access-Control-Allow-Origin头部,而不能使用通配符*。同时,服务器还需要设置Access-Control-Allow-Credentials为true,以指示它接受带有凭据的请求,这是接口跨域;cookie的配置如下:需要注意的就是domain的配置,
Domain:.fanyue.com即:fanyue.com二级域名下的所有子域名均可共享
{
path: /,
Domain: .fanyue.cn,
HttpOnly: true,
Secure: true,
}
结语:
本分享纯属个人观点,如有错误,恳请指正~
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END










暂无评论内容