You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Safari中localhost子域名无法存储Cookie问题排查

问题原因及解决方案

核心原因

Safari 对本地开发环境中 .localhost 后缀的域名有特殊的 Cookie 策略限制,主要涉及两点:

  1. 公共后缀识别逻辑差异:Safari 会将 .localhost 归类为公共后缀(类似.com``.org这类顶级域名),根据 Cookie 规范,无法将通配符形式的域名(.projectname.localhost)设置为 Cookie 的 Domain 属性,否则会直接拒绝存储该 Cookie。而 Chrome 对 .localhost 后缀的处理更为宽松,允许这类通配符域名设置。
  2. 非HTTPS环境的严格校验:Safari 对非HTTPS环境下的跨域 Cookie 存储有更严苛的校验规则,即便已经配置了 Access-Control-Allow-Credentials: true,也会因为域名后缀的特殊判定拒绝写入 Cookie。

修复方案

  • 调整Django的Cookie域名配置:将 SESSION_COOKIE_DOMAIN 修改为不带前缀点的精确域名:

    SESSION_COOKIE_DOMAIN = "projectname.localhost"
    

    改为精确匹配的域名后,Safari 可以正常识别并存储 Cookie。

  • 改用自定义本地域名:修改本地hosts文件,添加自定义顶级域名的映射(比如projectname.test):

    127.0.0.1 www.projectname.test
    127.0.0.1 api.projectname.test
    

    同时更新 Django 和 SvelteKit 的配置,使用新域名。这种方式可以避开 Safari 对 .localhost 后缀的特殊限制。

  • 启用本地HTTPS(推荐接近生产环境的调试):用工具(如mkcert)生成本地HTTPS证书,然后将 Django 的 SESSION_COOKIE_SECURE 设置为True。Safari 对 HTTPS 环境下的跨域 Cookie 限制会宽松很多,同时也更贴合生产环境的配置逻辑。

  • 临时调试关闭Safari跟踪限制:打开 Safari 偏好设置→隐私→取消勾选「阻止跨网站跟踪」。注意这仅作为临时调试手段,不能用于生产环境。


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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.02 01:36:31