如何查询存储在数据库中的session

How to query session stored in database

我已将我的 Web 应用程序配置为使用数据库而不是文件来存储会话。到目前为止一切顺利。

我可以像这样轻松地存储一对键值:

$request->session()->put('current_page', $request->route()->uri());
$request->session()->save();

现在我想创建一个 SQL 查询来检索具有值 users 与 current_page 键配对且其中 user_id 不为空.

$query = DB::table('sessions')->whereNotNull('user_id')->whereJsonContains('payload', ['currrent_page' => 'users'])->get();

上一个查询returns没有行!!

由于这是 base64 编码的序列化数据,您可以遍历所有会话并解码和反序列化它们的有效负载以找到您想要的:

$sessions = DB::table('sessions')->whereNotNull('user_id')->cursor();

$filtered = $sessions->filter(function ($session) {
    return collect(unserialize(base64_decode($session->payload)))
        ->get('current_page') === 'users';
});

foreach ($filtered as $session) {
    ...
}