防止Laravel会话在子域上重叠

r3i60tvu  于 2022-12-01  发布在  其他
关注(0)|答案(3)|浏览(113)

我的域中有同一个Laravel应用程序的两个***独立***副本,在独占使用时,每个副本的行为都符合预期:

app1.mydomain.com
app2.mydomain.com

它们在各自的.env文件中有不同的APP_NAME值。我希望这两个变量是完全独立的(因此所有的rational env变量都被设置为唯一的,例如:APP_KEY s、APP_NAME s、APP_URL s等)。虽然指定了两个不同的数据库(当然是在同一台主机上),但我在这两个数据库上设置了相同的“用户”。
问题是,有时当它们一起使用时(有点并发),当我已经通过“用户”凭据登录到其中一个时,会出现419错误,而试图通过不同但相同的“用户”凭据登录到另一个!而用户已经登录到另一个假定独立的子域。我尝试了SESSION_COOKIESESSION_DOMAIN环境变量,但没有效果。
通过设置SESSION_DOMAIN s分别为app1.mydomain.comapp2.mydomain.com;您可以成功登录其中一个;但尝试登录另一个会显示错误页419!此外,在浏览器中会话的域条目前面设置了一个点,例如:.app1.mydomain.com(而当您省略SESSION_DOMAIN时,显示的值不带前导点。)
我注意到app1_session的会话也会出现在app2.mydomain.com的浏览器cookie中(有时laravel_session的会话也会出现!只要系统没有读取APP_NAME的环境变量,laravel就会被默认字符串替代!)
那么,出了什么问题,我该怎么解决?!

f87krz0w

f87krz0w1#

假设您正在设置指向每个独立子域的每个.env文件。您可能需要的功能是将same_site值设置为strict
这将确保只接受来自定义域的Cookie。
顺便说一句,一旦你改变了它,它就是一个php artisan config:clear

8ftvxx2r

8ftvxx2r2#

我认为这不是一个问题,对您的任何子域可能.我认为你在那里 checkout 两个网站在同一个浏览器示例,为什么这个问题正在发生尝试使用一个正常的浏览器模式&打开另一个在私人模式(或)隐姓埋名模式...它可能会对您的情况下工作...
如果它不适合你实现一个Laravel会话表,这样你就可以跟踪有当前会话的登录用户的会话id,我希望它适合你

7cwmlq89

7cwmlq893#

同样的问题也发生在我身上,通过在每个项目中为SESSION_COOKIE=设置不同的值来修复。env

相关问题