如何避免iOS Safari自动删除登录Cookie,实现Web应用持久登录?
问题根因
你遇到的是iOS Safari内置的智能跟踪预防(ITP, Intelligent Tracking Prevention) 策略触发的Cookie限制:对于非用户显式交互(点击、表单提交等主动操作)触发的请求返回的Cookie,ITP会强制将其有效时长限制为24小时,无论你设置的Max-Age是多长,刚好匹配你遇到的1天失效的问题。
可行解决方案
- 确保登录Cookie在用户主动交互的请求响应中设置
必须在用户点击登录按钮提交登录请求的响应中返回Set-Cookie头,不能在页面加载、自动跳转等无用户主动操作的请求中下发登录Cookie,该操作可以让ITP判定该Cookie为用户需要的正常功能Cookie,不会强制截断有效期。 - 调整
SameSite属性为Lax
你当前使用的SameSite=Strict限制过严,当用户从第三方App、邮件、其他站点跳转进入你的站点时,Strict规则不会携带Cookie,后端识别为未登录状态重新下发Cookie时,若没有对应主动交互会再次触发24小时限制。修改为SameSite=Lax后,跨站GET请求会正常携带Cookie,既满足常规安全要求,也能避免该类误判。 - 补充刷新令牌机制兜底
新增一个refresh_token类型的Cookie,同样配置HttpOnly、Secure、SameSite=Lax属性,有效期可以设置为15~30天。当loginCookie失效时,用户首次打开站点时自动向后台发送刷新请求,用合法的refresh_token换取新的loginCookie,该场景下用户主动打开站点属于显式交互范畴,新下发的Cookie不会被ITP限制。 - 排查异常嵌套场景
如果你的登录流程是在iframe中完成的,ITP对iframe上下文下发的Cookie会有额外的限制,建议改为整页跳转登录、弹窗登录等顶级上下文的交互方案。 - 修正Domain配置(可选)
如果你同时支持根域名example.com和www.example.com访问,建议将Domain参数改为.example.com(前缀加点),避免跨域名访问时无法读取Cookie导致的“失效”假象。
内容的提问来源于stack exchange,提问作者chmike
相关产品推荐
相关产品推荐

