首页 > 解决方案 > php - 当同一服务器上的另一个项目运行巨大的数据库作业时,laravel 丢失了登录会话

问题描述

当同一服务器上的另一个项目运行巨大的数据库作业时,laravel 会丢失登录会话。

两个项目托管在同一个 apache/nginx 中并使用 laravel 5.4。但它们有不同的会话 cookie 名称。

另一个项目正在做的只是从数据库中获取数据,更改一个值并更新它。

这是我在转储会话时得到的(通过会话()->所有())。

在另一个项目运行作业之前 "_token" => "1RHWi0cOzmTKtNvQRfpSiuKY8XrMTPyaRVmOrjZ1" "login_admin_59ba36addc2b2f9401580f014c7f58ea4e30989d" => 10 当另一个项目运行巨大的数据库作业 "_token" => "a48IdcffgDsqqPM0Z3c3w8HlQcBSEpniMVJb25g5" 后取消(在浏览器中)运行另一个项目的作业 "_token" => "1RHWi0cOzmTKtNvQRfpSiuKY8XrMTPyaRVmOrjZ1" "login_admin_59ba36addc2b2f9401580f014c7f58ea4e30989d" => 10

会话驱动器是文件。我试图将会话驱动器更改为 cookie 和数据库,但它们都不起作用。

有人对如何解决它有想法吗?非常感谢!!!

标签: phplaravelsessionauthentication

解决方案


此问题是由使用getenv(). 当一个 laravel 项目正在运行并.env加载时。当 anthor 项目同时运行时,它发现 env 已经设置并使用它。

要解决这个问题:

  1. 使用不同的环境变量名称。例如在项目 A 中,APP_URL_A = ***,对于 B,使用 APP_URL_B
  2. 在 vhost 配置中编写 env
  3. 如果使用 laravel,缓存配置(通过运行php artisan config:cache

有用的链接:
https ://github.com/vlucas/phpdotenv/issues/219


推荐阅读