【发布时间】:2015-03-25 08:02:55
【问题描述】:
我在多前端/应用服务器环境中使用 Laravel(即——负载均衡器后面的两个 Web 服务器)。
我正在调试 Laravel 应用程序在向服务器发出几次请求后丢失其会话数据的问题。我们将数据库会话与单个 MySQL 数据库实例一起使用。
我注意到每次重新加载页面时,laravel_session cookie 都会发生变化。一页刷新是这样的
eyJpdiI6I-mRudUNnM0ZpQzdxYmNyaWw0d21nWFE9PSIsInZhbHVlIjoiazVDQTVuZ0IzYUg5V0l3czBxaFl6bFRrXC9aTjFmT0VBeGVDYXg1REZQM2pIS1U0U1JCSVVreHprYU44ZjhKQTU4OTVUUGxpXC9qbWZpd0FcL2NtXC9ST25B-PT0iLCJtYWMiOiJ-hZWYxNTU4MDY0ODQxODViNDRjMjQzZGE1ZDQwZDA0YzQ0ZDY1YjE3YWE3YTc3ZjcwNTg4NGE3NDhhMWMzMGU0In0
然后重新加载页面看起来像这样
eyJpdiI6I-nFjRjN1TGp0Q3Z3VmlrOG1PQlwveDF3PT0iLCJ2YWx1ZSI6IkVRYkpuWXFIVms5YnBwRXU2b1wvMFZSbW14RkVTZm8yVEpnaHRiOEhpWnlJWm9OM0JRR1wvYUI1VWhmeGYxQm0yaEFrc25PZUVcL3NSZ0RtUytzWHR3THp3-PT0iLCJtYWMiOiJ-jNTQ1YjM0MTkwZDVmM2RlMTAxYmNkMjAzMTY1NzVjMDExNTkxODAyZDM0YmQ5ZTk5NzFiNmY1YjQxYzE3ZjY1In0
- 是我添加的,以表明有些部分保持不变。
问题:
这种改变会话 ID 是标准 Laravel 行为吗?Laravel 4.2 数据库会话能否在多前端 Web 服务器环境中开箱即用?
会话实现在 Laravel 的核心中的哪个位置,以便我可以自己研究它?
回复:#1,根据ceejayoz,laravel_session cookie 在每次服务器请求时都会重新加密,并且这种加密包括一些随机化——这意味着不断变化的 laravel_session 值是标准 Laravel 行为。
【问题讨论】:
-
如果你先
php artisan tinker然后Crypt::decrypt('your session cookie contents');会显示会话数据吗? -
+1 获取有用信息——如果我解密会话内容,我会得到 session_id(我使用的是数据库驱动程序,而不是 cookie 驱动程序)。你知道 Laravel 在哪里加密/解密这个 cookie 的内容吗?如果日期/时间是可以解释变化值的地穴盐的一部分。
-
我相信 Laravel 会加密
Illuminate\Cookie\Guard中的所有 cookie。我认为盐是随机的,但不要引用我的话。