Laravel 所有会话 ID 与 Redis 驱动程序

Sai*_*akR 2 php session redis laravel-5 laravel-5.4

在我的应用程序中,我希望允许某些用户能够注销除他/她之外的所有其他用户。当会话驱动程序设置为文件时,我已经完成了此功能,但是现在我使用 redis 作为会话驱动程序,并且我无法找到任何方法来列出所有当前会话,就像我在使用它时所做的那样文件驱动程序。

\n\n

问题是:使用redis作为会话驱动程序时如何列出所有会话ID?

\n\n

以下是我在会话驱动程序文件时使用的代码:

\n\n
public function signoutAllUsers(Request $request,$sesId=null){\n        //dd(session());\n        if ($sesId == session()->getId()){\n            $dir = storage_path().\'/framework/sessions\';\n            $files = scandir($dir);\n            foreach ($files as $file){\n                if ($file == session()->getId() || strpos($file,\'.\') !== false){\n                    //echo "ggg";\n                    continue;\n                }\n                try{\n                    unlink($dir.\'/\'.$file);\n                }\n                catch(\\Exception $e){\n                    return $e;\n                }                \n\n            }\n            $request->session()->flash(\'status\',\'success\');\n            $request->session()->flash(\'msg\',__(\'All users have been signed out successfully\'));\n            return redirect(\'/method/create\');\n\n        }\n        else{\n            return redirect(\'/method/create\');\n        }\n\n    }\n
Run Code Online (Sandbox Code Playgroud)\n\n

更新

\n\n

我找到了一个取决于Redis门面方法的有限解决方案command

\n\n

\nRedis::command(\'keys\',[\'*\'])\n\n但是,它返回的输出如下所示:

\n\n

\narray:4 [\xe2\x96\xbc\n 0 => "laravel:cav17Job1_7l46wAdE2--__"\n 1 => "laravel:cav17Job1_7l46wAdE2--_"\n 2 => "laravel:WwerTYmw2VNAfR5nKj3OOGBp2hKytSBK4MWMJ2P9"\n 3 => "laravel:12tyuwzoFhXPM4f6w4yRPxrYywPon4W41neq6gu"\n]\n\n上面的输出包含会话 ID 和其他缓存条目,在我的应用程序中我也使用 Redis 进行缓存。

\n\n

问题是,除了laravel缓存键之外,我如何为存储在 redis 中的会话提供不同的键?

\n

Yev*_*yev 5

保持你的sessioncache分开。

在文件中\config\database.php

您可以设置多个 redis连接,默认情况下有一个"default",但您可以添加更多连接

假设您创建'session-connection'了并且'cache-connection'

现在你需要利用它

转到文件“config\session.php”

并将其设置为'connection' => 'session-connection',

然后转到文件config\cache.php

并将其设置为

    'redis' => [
        'driver'     => 'redis',
        'connection' => 'cache-connection',
    ],
Run Code Online (Sandbox Code Playgroud)

现在你可以获取你的redis会话记录了。

use Illuminate\Support\Facades\Redis;
\Log::debug( Redis::connection('session-connection')->keys('*') );
Run Code Online (Sandbox Code Playgroud)