在 Safari 13 中跨 .test 子域共享 cookie 是不可能的
Sharing cookies across .test sub-domains in Safari 13 not possible
我有 https://example.test & https://m.example.test
的 apache 自我证书
浏览 https://m.example.test 时,使用 php 'session.cookie_domain' 将 cookie 设置为基域“.example.test”。这在 Chrome、Firefox 或 Safari 最高版本 12 中有效。
但是,它不再适用于 Safari 13(iOS 13 或 Catalina)。
更奇怪的是,在我的 https://example.COM & https://m.example.COM
生产机器上,cookie 仍然设置为 Safari 13 上的基域
我的 COM 和 TEST 服务器的 apache 服务器配置相同。在将我的 iOS 设备更新到 iOS 13 或在 Catalina 之后的 MacOS 中,它只是停止在我的开发“.test”服务器上工作。 Chrome,Firefox 仍然有效。即使是连接到我的开发机器(通过代理)的旧 iOS 设备仍然将 cookie 存储到基本域“.example.test”。所以它看起来像是 Safari 13 特有的东西,而且只在“.test”域中。
我使用 Apple 的最新建议(最长 825 天等)为我的 .TEST 服务器创建了新证书,但没有任何区别。看起来自签名证书可能发生了一些变化。或者可能存在针对“.test”(不是 public)域的新规则?它是特定于 Safari、“.test”非 public 域或证书的东西。或者其他我什至没有想到的东西。
知道如何配置 Apache/Macosx/certificates 以便我仍然可以在开发 .test 域中使用 Safari 13 跨子域共享 cookie 吗?谢谢
这不是证书的问题,但这似乎是 Safari 解析 .test
TLD 的方式不同。
我们通过为我们需要的每个子域明确设置 cookie 来解决这个问题。在我们的 Rails 应用程序中,在开发环境中,我们像这样设置会话存储:
config.session_store(
:active_record_store,
key: 'our_app_session',
domain: ['ourapp.test', 'api.ourapp.test', 'help.ourapp.test']
)
如果您能想出在后台做同样事情的方法,您应该能够为不同的 .test
子域使用相同的 cookie。
我在 .test
tld 的通配符子域和 cookie 方面遇到了同样的问题。它在 Chrome 中有效,但 Safari 13 未设置 cookie。
我的解决方法是改用 .local
。这在 Safari 中也有效。
(像@gueorgui 建议的那样单独指定每个子域并不能按预期工作,因为浏览器将为每个子域设置一个单独的 cookie)
我有 https://example.test & https://m.example.test
的 apache 自我证书浏览 https://m.example.test 时,使用 php 'session.cookie_domain' 将 cookie 设置为基域“.example.test”。这在 Chrome、Firefox 或 Safari 最高版本 12 中有效。 但是,它不再适用于 Safari 13(iOS 13 或 Catalina)。
更奇怪的是,在我的 https://example.COM & https://m.example.COM
生产机器上,cookie 仍然设置为 Safari 13 上的基域我的 COM 和 TEST 服务器的 apache 服务器配置相同。在将我的 iOS 设备更新到 iOS 13 或在 Catalina 之后的 MacOS 中,它只是停止在我的开发“.test”服务器上工作。 Chrome,Firefox 仍然有效。即使是连接到我的开发机器(通过代理)的旧 iOS 设备仍然将 cookie 存储到基本域“.example.test”。所以它看起来像是 Safari 13 特有的东西,而且只在“.test”域中。
我使用 Apple 的最新建议(最长 825 天等)为我的 .TEST 服务器创建了新证书,但没有任何区别。看起来自签名证书可能发生了一些变化。或者可能存在针对“.test”(不是 public)域的新规则?它是特定于 Safari、“.test”非 public 域或证书的东西。或者其他我什至没有想到的东西。
知道如何配置 Apache/Macosx/certificates 以便我仍然可以在开发 .test 域中使用 Safari 13 跨子域共享 cookie 吗?谢谢
这不是证书的问题,但这似乎是 Safari 解析 .test
TLD 的方式不同。
我们通过为我们需要的每个子域明确设置 cookie 来解决这个问题。在我们的 Rails 应用程序中,在开发环境中,我们像这样设置会话存储:
config.session_store(
:active_record_store,
key: 'our_app_session',
domain: ['ourapp.test', 'api.ourapp.test', 'help.ourapp.test']
)
如果您能想出在后台做同样事情的方法,您应该能够为不同的 .test
子域使用相同的 cookie。
我在 .test
tld 的通配符子域和 cookie 方面遇到了同样的问题。它在 Chrome 中有效,但 Safari 13 未设置 cookie。
我的解决方法是改用 .local
。这在 Safari 中也有效。
(像@gueorgui 建议的那样单独指定每个子域并不能按预期工作,因为浏览器将为每个子域设置一个单独的 cookie)