【问题标题】:Laravel Application session expires on AWS ELBLaravel 应用程序会话在 AWS ELB 上过期
【发布时间】:2019-06-10 08:48:27
【问题描述】:
我在 AWS Elastic Beanstalk 上部署了一个 Laravel 应用程序,带有一个经典的负载均衡器。不知何故,用户会话在不规则的时间过期。有时它会在登录后立即过期,大多数时候在登录后几分钟。在某些情况下,它需要几个小时才能过期。但是在本地主机上,这不会发生。
我已将我的 Laravel 应用程序中的会话持续时间配置为 10 小时,这在 localhost 上运行良好,但不知何故它在 AWS ELB 上不起作用。
我怀疑 AWS 在一天内多次重置应用会话。如果是这种情况,我该如何克服呢?如果不是这样,那可能是什么原因造成的?
【问题讨论】:
标签:
laravel
amazon-web-services
session
amazon-ec2
amazon-elb
【解决方案1】:
我在这里发布答案,这样任何人都会遇到同样的问题。 AWS 服务器发生的情况是,他们每天会重新部署您的代码几次,这会清除您项目中所有新创建的文件和上传的文件。这就是为什么如果你想存储文件就必须使用云存储,而会话也会发生同样的事情。
默认情况下,laravel 将会话保存在一个文件中,并且每当 AWS 重新部署您的代码时,它会擦除所有当前会话,因为它会删除会话文件。解决方案是将会话存储在文件以外的任何地方。所以我用我的数据库来存储会话和缓存。你可以这样做
转到 config/session.php 并将驱动程序更改为 database
运行后
php artisan session:table
php 工匠迁移
这些将为您在数据库中创建会话表,这应该可以解决 AWS 问题。就像@arun-a 简而言之。您可以查看sessions docs 了解更多信息。
【解决方案2】:
如果您使用负载平衡器,则必须保持会话集中,以便通过多个服务器进行访问。所以使用会话驱动作为数据库而不是文件并进行相关迁移。请参阅here。