You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

iOS 11 Safari关闭后JS设置的Cookie无法持久化问题咨询

为什么iOS 11 Safari会丢失你设置的publish=on Cookie?

我之前也碰到过类似的iOS Safari Cookie问题,结合你的描述来看,大概率是以下几个细节没处理好——iOS 11的Safari在Cookie存储逻辑上确实和桌面浏览器、甚至后续iOS版本有不一样的地方:

1. 你设置的是「会话级Cookie」(未指定有效期)

如果你的JavaScript代码设置Cookie时,没有添加expiresmax-age属性,那这个Cookie就是会话Cookie——这类Cookie只在当前浏览器会话中存在,一旦关闭Safari,系统就会自动清除它。而第三方Cookie通常会明确设置较长的有效期(比如几个月甚至几年),所以关闭浏览器后还能保留。

先检查下你的代码是不是类似这样:

document.cookie = "publish=on";

如果是,改成带长期有效期的版本即可,比如设置30天后过期:

// 生成30天后的过期时间
const expiry = new Date();
expiry.setTime(expiry.getTime() + 30 * 24 * 60 * 60 * 1000);
// 带上有效期和全局路径,确保整个站点都能访问
document.cookie = `publish=on; expires=${expiry.toUTCString()}; path=/`;

2. Cookie的路径(path)或域名(domain)设置错误

如果你的Cookie指定了特定的path(比如/article),重启浏览器后访问的页面不在这个路径下,就会读取不到Cookie。另外,域名设置不匹配也会导致问题:比如你访问的是example.com,但Cookie的domain设成了www.example.com,iOS 11的Safari对这种域名不一致的情况会更严格。

建议统一设置全局路径和正确的域名:

// 确保Cookie在整个域名下有效,同时指定长期有效期
document.cookie = "publish=on; expires=Wed, 31 Dec 2025 23:59:59 UTC; path=/; domain=.example.com";

注:域名前加.可以让带www和不带www的子域名共享这个Cookie。

3. iOS 11的「阻止跨站跟踪」特性(早期ITP)

虽然你说没开启Cookie拦截,但iOS 11的Safari默认开启了阻止跨站跟踪功能,它对一些特殊场景下的第一方Cookie可能有存储限制(比如在iframe中设置的第一方Cookie)。你可以去「设置」→「Safari浏览器」→「阻止跨站跟踪」,尝试关闭后再测试——第三方Cookie能保留,可能是因为它们符合ITP的豁免规则(比如来自常用的广告平台)。

4. 自动清除历史记录的系统设置

如果你的iOS设备设置了「自动清除历史记录与网站数据」,关闭Safari后系统会自动清除会话Cookie和未设置长期有效期的Cookie。检查路径:「设置」→「Safari浏览器」→「清除历史记录与网站数据」下方的「自动清除」,如果设成了“一天后”或“一周后”,改成“永不”试试。

总结

最常见的原因就是没给Cookie设置长期有效期,导致它是会话级的,关闭Safari就消失。先补全expires/max-agepath=/的设置,应该就能解决问题。如果还是不行,再排查域名匹配和系统设置的问题。

内容的提问来源于stack exchange,提问作者user237329

火山引擎 最新活动