使用jQuery Cookie设置1年有效期Cookie在Safari仅生效7天问题求助
问题原因
这个异常是Safari的智能跟踪预防(ITP, Intelligent Tracking Prevention) 策略导致的,是Safari为限制跨站跟踪推出的默认安全规则:
- 从ITP 2.1版本开始,所有通过前端JavaScript调用
document.cookie设置的第一方Cookie,无论代码中指定的过期时间多长,都会被Safari自动截断有效期,最长仅为7天。你使用的jQuery Cookie库本质是对document.cookieAPI的封装,因此会触发这个限制。 - Chrome、Firefox等浏览器暂无同类强制规则,所以你的代码在其他浏览器可以正常生效365天的有效期。
解决方法
- 优先选择后端设置Cookie:把Cookie写入逻辑移到服务端,在表单提交后的接口响应头中通过
Set-Cookie字段配置即可,格式参考:
通过HTTP响应头设置的Cookie不受ITP的7天有效期限制,可以正常达到你需要的1年有效期。Set-Cookie: login=logedin; Path=/shop; Expires=Wed, 05 Oct 2022 00:00:00 GMT; SameSite=Lax - 如果必须通过前端设置Cookie,可以先确认你的站点是否在Safari的可信站点列表中,或者有没有用户明确的主动授权交互(比如表单提交、点击确认按钮等),但该方案受Safari版本迭代影响较大,稳定性不如后端设置。
内容的提问来源于stack exchange,提问作者user6725932
相关产品推荐
相关产品推荐

