无法在 Safari 13 中跨 .test 子域共享 Cookie



我有一个 apache for https://example.test & https://m.example.test 的自我证书

浏览 https://m.example.test cookie 使用 php "session.cookie_domain" 设置为基本域".example.test"。这确实适用于Chrome,Firefox或Safari版本12。 但是,它在Safari 13(iOS 13或Catalina(中不再工作。

更奇怪的是,Safari 13 上的 cookie 仍然设置为基本域,而我的生产机器用于 https://example.COM & https://m.example.COM

我对 COM 和 TEST 服务器具有相同的 apache 服务器配置。在将我的iOS设备更新到iOS 13或在Catalina之后的MacOS中,它只是停止在我的开发".test"服务器上工作。Chrome,Firefox仍然有效。即使是连接到我的开发机器(通过代理(的旧iOS设备,仍然将cookie存储到基本域".example.test"。所以看起来它是特定于 Safari 13 的东西,并且仅在".test"域中。

我为我的 .测试服务器使用Apple的最新建议(最多825天等(,但它没有任何区别。看起来自签名证书可能发生了一些变化。或者也许".test"(非公共(域存在新规则?它要么是特定于Safari,要么是".test"非公共域或证书。或者我什至没有想到的其他事情。

知道如何配置 Apache/Macosx/证书,以便我仍然可以在开发 .test 域中使用 Safari 13 跨子域共享 cookie?谢谢。

我对.testTLD 的通配符子域和 cookie 也有同样的问题。它在Chrome中工作,但Safari 13没有设置cookie。

我的解决方法是改用.local。这在Safari中也有效。

(按照建议@gueorgui单独指定每个子域并不能按预期工作,因为浏览器将为每个子域设置单独的cookie(

这不是证书的问题,但似乎在 Safari 解析.testTLD 的方式上有所不同。

我们通过为我们需要的每个子域显式设置 cookie 来解决此问题。在我们的 Rails 应用程序中,在开发环境中,我们像这样设置会话存储:

config.session_store(
:active_record_store,
key: 'our_app_session',
domain: ['ourapp.test', 'api.ourapp.test', 'help.ourapp.test']
)

如果你能找到在后端做同样事情的方法,你应该能够对不同的.test子域使用相同的cookie。

最新更新