【发布时间】:2016-09-20 23:50:09
【问题描述】:
我已经卡了两天了,这是我的问题:
我正在查看 laravel 应用程序的奇怪行为,该应用程序不是我开发的,但我有责任弄清楚发生了什么。
我在 AWS ELB 后面设置了一个 laravel 应用程序,会话由 memcached (AWS elastic cache) 处理。有时一切都很好,然后发生了一些奇怪的事情:
当用户登录、在应用程序中导航、执行操作时,它会以某种方式向他显示登录页面。问题是,当我从地址栏中删除 /login 并将其替换为 /homepage 时,经过一番尝试,它通过了;它显示没有登录就无法访问的主页。这表明用户没有注销并且某些设置不正确。
在对此进行调查之后,这是我能制定的最佳解释:
在Laravel 中,有处理身份验证相关任务的 Catalyst/Sentry 包。当用户登录时,它会保存其 IP(在本例中为 ELB'ip),并且由于 elb's IP 正在更改,当用户在 ELB IP 更改发生后单击链接时,应用程序认为请求无效(我只是在大声思考)并向用户显示登录页面。
这是一个常见的问题!?如果是这样,我该如何解决这个问题!?
非常感谢任何帮助。非常感谢。
【问题讨论】:
-
一个天真的 - 并且可能错误,或者至少不是最佳的 - 解决方案将在 ELB 中启用 sticky sessions,这可能会隐藏问题,直到您找到并真正修复它。 ELB 将
X-Forwarded-For标头设置为客户端 IP,因此如果您的理论是正确的,那么应该有一个解决方案,但 Laravel 超出了我的专业范围。我怀疑您不是第一个遇到这种情况的人,可能有更正确的解决方案。
标签: amazon-web-services laravel-4 memcached amazon-elb cartalyst-sentry