Bu Saeed
Bu Saeed

Reputation: 1337

How to query session stored in database

I've configured my web application to use database instead of file to store sessions. So far so good.

I could store a pair of key value easily like this:

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

Now I want to make an SQL query to retrieve all sessions which have the value users paired with current_page key and where user_id IS NOT NULL.

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

The previous query returns no rows!!

Upvotes: 0

Views: 663

Answers (1)

lagbox
lagbox

Reputation: 50491

Since this is base64 encoded serialized data you can loop through all the sessions and decode and unserialize their payloads to find the ones you want:

$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) {
    ...
}

Upvotes: 1

Related Questions