Laravel AWS ELB 上的应用程序会话过期

Laravel Application session expires on AWS ELB

我有一个 Laravel 应用程序部署在带有经典负载均衡器的 AWS Elastic Beanstalk 上。不知何故,用户会话会在不规则的时间过期。有时它会在登录后立即过期,大多数情况下会在登录几分钟后过期。在某些情况下,过期需要几个小时。但在本地主机上,这不会发生。

我已将我的 Laravel 应用程序中的会话持续时间配置为 10 小时,这在本地主机上运行良好,但不知何故在 AWS ELB 上不起作用。

我怀疑 AWS 在一天内多次重置应用程序会话。如果是这样,我该如何克服呢?如果不是这种情况,那么可能是什么原因造成的?

如果您使用的是负载平衡器,则必须将会话保持在集中状态以便在多个服务器上进行访问。所以使用会话驱动程序作为数据库而不是文件并进行相关迁移。参考 here

我在这里发布答案只是为了让任何人 运行 遇到同样的问题。 AWS 服务器发生的事情是,他们每天会重新部署您的代码几次,这会清除您项目中所有新创建的文件和上传的文件。这就是为什么如果你想存储文件就必须使用云存储,同样的事情也会发生在 sessions 上。 默认情况下,laravel 将 session 保存在一个文件中,每当 AWS 重新部署您的代码时,它都会擦除所有当前的 session,因为它会删除 session 文件。解决方案是将 sessions 存储在文件以外的任何地方。所以我用我的数据库来存储 sessions 和缓存。您可以通过

转到 config/session.php 并将驱动程序更改为 数据库

运行之后

php artisan session:table

php artisan 迁移

这些将为您在数据库中创建 sessions table,这应该可以解决 AWS 问题。就像@arun-a简而言之。您可以查看 sessions docs 了解更多信息。