Laravel 会话 ID 随每个请求而变化
Posted
技术标签:
【中文标题】Laravel 会话 ID 随每个请求而变化【英文标题】:Laravel session id changes with each request 【发布时间】:2016-01-12 20:40:23 【问题描述】:我有一个 Laravel 5.0 站点,其中前端 JS 对后端 Laravel 代码进行大量 ajax 调用。我注意到,在每个 ajax 请求中,我每次都会在响应中获得一个新的“laravel_session”cookie 值。我猜这是一些防止会话劫持的安全机制。
但是我认为这会导致我的网站出现问题,因为我的 ajax 调用经常并行发生,而不是顺序发生。在触发下一个呼叫之前,我不会等待响应。
考虑这种情况
。 Ajax 调用 1 - 请求 - laravel_session cookie = '1234'
。 Ajax 调用 1 - 响应 - laravel_session cookie = '2345'
。 Ajax 调用 2 - request- laravel_session cookie = '2345'
。 Ajax 调用 3 - request- laravel_session cookie = '2345'
。 Ajax 调用 2 - 响应 - laravel_session cookie = '3456'
。 Ajax 调用 3 - 响应 - 会话不再有效
有没有办法解决这个问题?
我还应该注意会话在 config/session.php 中设置为过期 '终生' => 120,
【问题讨论】:
这不是一种安全机制,你是对的 - 它不应该发生。检查config/session.php
中的会话设置,并检查cookie 路径是否有效。默认情况下,基于文件的会话应存储在 storage/framework/sessions/
- 如果该文件夹为空,那么您的安装可能无法正确写入该文件夹。
我在 config/session.php 中的设置对我来说看起来不错 'files' => storage_path().'/framework/sessions',我可以看到文件正在 storage/framework/sessions/ 中创建
对我来说是 'files' => storage_path('framework/sessions')
【参考方案1】:
你说得对,它是一种安全机制。要禁用它进行测试,请在 Kernel.php 中注释掉这一行:
\App\Http\Middleware\EncryptCookies::class
然后您将在 cookie 查看器中看到会话 ID,它不会改变。
您可以通过 Google 搜索 HTTP 加密 cookie 来了解这种做法。既然我们在每个网站上都使用 HTTPS,是否有必要使用这种旧做法仍然存在争议。
【讨论】:
你为什么这么说?这不是真的,您是在建议某人禁用安全机制。 我赞成这个。问题归结为,“为什么会发生这种情况?安全问题?”我相信这回答了它。您可以注释掉该行以进行验证,但我不认为这是删除加密的建议。 谢谢,我编辑了答案以澄清禁用以进行测试。【参考方案2】:您的域无效。您需要查看config.session.domain
和config.session.path
。
【讨论】:
我已将 config/session.php 中的“域”设置更改为我网站的域,但仍然存在问题。 'path' 设置为 '/' 这对我来说似乎很好 您确定域是正确的吗?可以再发一张截图吗?几个小时以来我一直遇到同样的问题,直到我意识到我不小心犯了一个小错误。 我已经添加了截图。 local.mysite.com 是本地运行时站点的 url。我有一个主机条目。 我遇到了这个错误,是的,域不正确。我必须死。刚刚失去了我生命中的 4 个小时。 -_-【参考方案3】:同样的问题发生在我身上,后来发现是我在使用
protected $middleware = [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class
];
protected $middlewareGroups = [
'web' => [
\Illuminate\Session\Middleware\StartSession::class,
\Illuminate\View\Middleware\ShareErrorsFromSession::class
]
]
在 $middleware 和 $middlewaregroups 中,它正在创建一个在不同路由之间移动的新会话 ID。
【讨论】:
以上是关于Laravel 会话 ID 随每个请求而变化的主要内容,如果未能解决你的问题,请参考以下文章
PHP Session ID / Session 变量值随着来自 react axios / ajax 调用的每个请求而变化