在Laravel 5.8中,与会话一起工作时,与Laravel 5.7相比,对数据库执行了两个额外的查询。
Laravel 5.7
select * from `sessions` where `id` = '00kaQxJLG6roUAp9DaCui7esa31sbthHqEzwW62H' limit 1
Laravel 5.8
select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1
update `sessions` set `payload` = 'YTozOntzOjY6Il90b2tlbiI7czo0MDoiQm12QlFHNzVNRVpZcTRkMWZwcmNMS2kwcm12czlvZkpXZUg0cFpEQyI7czo5OiJfcHJldmlvdXMiO2E6MTp7czozOiJ1cmwiO3M6MTY6Imh0dHA6Ly9kZXYubG9jYWwiO31zOjY6Il9mbGFzaCI7YToyOntzOjM6Im9sZCI7YTowOnt9czozOiJuZXciO2E6MDp7fX19', `last_activity` = 1559161593, `user_id` = '', `ip_address` = '127.0.0.1', `user_agent` = 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu Chromium/73.0.3683.86 Chrome/73.0.3683.86 Safari/537.36' where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD'
select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1
新安装。没有包裹。
答案 0 :(得分:1)
已解决
在Laravel 5.8中,中间件已更改
Illuminate/Session/Middleware/StartSession.php
在方法句柄中已添加
$this->saveSession($request);
如果已配置会话,则它将在数据库中更新。
仅在Laravel 5.7中使用cookie。
答案 1 :(得分:0)
在开发 Laravel 8 应用程序时,我也遇到了这种情况,幸运的是没有什么可担心的,如下所述:
https://laracasts.com/discuss/channels/laravel/duplicate-session-query
laravel 调试栏的输出
select * from `sessions` where `id` = 'ZGtPxAAAlFsMcZOC4OXnwRRX8n8gf9uWsqeefjoP' limit 1
update `sessions` set `payload` = `sdffbbblablablverylong`
select * from `sessions` where `id` = 'ZGtPxAAAlFsMcZOC4OXnwRRX8n8gf9uWsqeefjoP' limit 1
<块引用>
这意味着在您的应用程序中使用数据库驱动程序进行会话,并使用它来存储一些信息。不,这不是问题。别担心。
-MichalOravec
答案 2 :(得分:-1)
您已两次编写相同的查询。
select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1
您可以通过将查询初始化为变量来解决此问题,然后在需要时使用该变量。
$session = select * from `sessions` where `id` = 'anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD' limit 1;
这应该删除重复项。
雄辩的查询
$session = Session::query()->where('id','anFc8QgnSpMbMVHcuxAldxKdLhNyo3IUNavylQTD')->take(1)->get();