尚未在Safari 13中为基本域设置Laravel 6会话Cookie

时间:2019-12-03 19:54:06

标签: php laravel session cookies safari

在Laravel框架中,在根域级别设置会话Cookie在safari 13.0.3中不起作用,但在Safari 12,Chrome和Firefox中有效。

由于未设置cookie,因此每次刷新页面都会创建一个新会话,并且无法登录。

除了app / session.php中的会话行为外,我还使用默认的laravel设置,其中我已将SESSION_DOMAIN更改为根域(“ .example.test”),并将SESSION_DRIVER设置为“数据库”(如下)来自Persisting sessions across subdomains in Laravel 5的建议。

当域设置为完整URL(subdomain.example.com)时,cookie会在safari 13中设置,但更改为根URL(.example.com)时不会设置

在Safari调试工具中,我可以看到设置了请求标头并通过了请求标头,但cookie从未将其存储到存储中。

网络请求标头/ Cookie: Network request headers/cookies

我尝试过的事情:

  • 在有和没有驱动程序的情况下尝试作为数据库
  • 在session.php中更改会话cookie名称,相同站点的行为和安全行为
  • 在会话域末尾添加斜杠,并删除第一个。
  • 隐身/私人浏览模式(不会更改行为,仍然适用于Chrome浏览器,但不能用于Safari)
  • 隔离问题并升级到最新的laravel版本(最初在5.6上注意到,最新版本6.6仍在发生)
  • 关闭Cookie加密

1 个答案:

答案 0 :(得分:1)

我无法测试Safari 13,但我猜是最近的RFC 6265 (2011)

  

Domain属性指定将向其发送Cookie的那些主机。例如,如果“域”属性的值为“ example.com”,则在向example.com,www.example.com和www.corp.example发出HTTP请求时,用户代理会将cookie包含在Cookie标头中。 com。 (请注意,即使不允许该字符,也会忽略前导%x2E(“。”)(如果存在),但如果存在尾随%x2E(“。”),则将导致用户代理忽略该属性。 )如果服务器省略了“域”属性,则用户代理只会将Cookie返回给原始服务器。

SESSION_DOMAIN设置为根域example.test,而没有结尾的.

请注意,没有尾随.的域在旧的RFC 2109 (1997)中是无效的,某些非常旧的浏览器可能不接受cookie。 Safari 12和其他流行的浏览器将接受Cookie,因为RFC 2965 (2000)

  

如果明确指定的值不是以点开头,则用户代理会提供前导点