php - 水平扩展环境中的 Laravel 数据库 session

标签 php session laravel

我在多个前端/应用程序服务器环境中使用 Laravel(即负载均衡器后面的两个 Web 服务器)。

我正在调试一个问题,即 Laravel 应用程序在向服务器发出几次请求后丢失其 session 数据。我们将数据库 session 与单个 MySQL 数据库实例一起使用。

我注意到每次重新加载页面时,laravel_session cookie 都会发生变化。一页一页刷新看起来像这样

eyJpdiI6I-mRudUNnM0ZpQzdxYmNyaWw0d21nWFE9PSIsInZhbHVlIjoiazVDQTVuZ0IzYUg5V0l3czBxaFl6bFRrXC9aTjFmT0VBeGVDYXg1REZQM2pIS1U0U1JCSVVreHprYU44ZjhKQTU4OTVUUGxpXC9qbWZpd0FcL2NtXC9ST25B-PT0iLCJtYWMiOiJ-hZWYxNTU4MDY0ODQxODViNDRjMjQzZGE1ZDQwZDA0YzQ0ZDY1YjE3YWE3YTc3ZjcwNTg4NGE3NDhhMWMzMGU0In0

然后再次重新加载页面,看起来像这样

eyJpdiI6I-nFjRjN1TGp0Q3Z3VmlrOG1PQlwveDF3PT0iLCJ2YWx1ZSI6IkVRYkpuWXFIVms5YnBwRXU2b1wvMFZSbW14RkVTZm8yVEpnaHRiOEhpWnlJWm9OM0JRR1wvYUI1VWhmeGYxQm0yaEFrc25PZUVcL3NSZ0RtUytzWHR3THp3-PT0iLCJtYWMiOiJ-jNTQ1YjM0MTkwZDVmM2RlMTAxYmNkMjAzMTY1NzVjMDExNTkxODAyZDM0YmQ5ZTk5NzFiNmY1YjQxYzE3ZjY1In0

- 是我添加的内容,旨在表明有些部分保持不变。

问题:

  1. 更改 session ID 是 Laravel 的标准行为吗?

  2. Laravel 4.2 数据库 session 可以在多前端 Web 服务器环境中开箱即用吗?

  3. session 实现位于 Laravel 核心的哪个位置,以便我可以自己查看它?

回复:#1,根据 ceejayozlaravel_session cookie 在每次服务器请求时都会重新加密,并且这种加密包括一点随机化——这意味着不断变化的 laravel_session 值是标准的 Laravel 行为。

最佳答案

这可能有多种原因,但最有可能的原因是您的负载均衡器将您定向到另一台不知道您的 session ID 的服务器,因此为您生成一个新 session 。

解决这个问题的方法是使用共享 key 存储,如 redis 。 Laravel 有 native support for redis ,因此无需花费太多精力即可启动并运行它,然后您的 session 缓存将在您的应用程序之间共享。 Redis 性能非常好且易于设置,因此您的服务器不会因它而严重重载。您可能需要根据高负载下的 session 数量考虑升级 RAM。

当然,您也可以将 session 缓存目录移动到网络共享。这可能是低效且浪费精力,但你的竞争对手会开怀大笑;)

编辑:还要确保两个应用程序具有相同的加密 key

关于php - 水平扩展环境中的 Laravel 数据库 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28158072/

相关文章:

PHP:将远程文件写入目录,无需 chmod 777

php - 具有可变数量的 where 子句的 Laravel 5 查询

java - 在Servlet中创建Session并在JSP页面中使用?

php - "SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: ' 2018 ' for column ' 在 ' at row 1 (SQL: insert into ` 新闻`

mysql - Laravel,插入多行而不使用foreach

php - 为什么 PHP 日期的迭代数周会出错?

php - 从两个 mysql 表中选择,其中列值相似并且 id 从上一页检索

php - 将MySQL数据库备份到Dropbox

python - 如何在sklearn中保存自定义转换器?

asp.net - 跨两个命名域共享 session cookie