php - Laravel 所有 session ID 与 Redis 驱动程序

标签 php session laravel-5 redis laravel-5.4

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

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

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

public function signoutAllUsers(Request $request,$sesId=null){
        //dd(session());
        if ($sesId == session()->getId()){
            $dir = storage_path().'/framework/sessions';
            $files = scandir($dir);
            foreach ($files as $file){
                if ($file == session()->getId() || strpos($file,'.') !== false){
                    //echo "ggg";
                    continue;
                }
                try{
                    unlink($dir.'/'.$file);
                }
                catch(\Exception $e){
                    return $e;
                }                

            }
            $request->session()->flash('status','success');
            $request->session()->flash('msg',__('All users have been signed out successfully'));
            return redirect('/method/create');

        }
        else{
            return redirect('/method/create');
        }

    }

更新

我找到了一个依赖于Redis外观方法command的有限解决方案:

Redis::命令('键',['*']) 但是,它返回的输出如下所示:

数组:4 [▼ 0 => “laravel:cav17Job1_7l46wAdE2--__” 1 => “laravel:cav17Job1_7l46wAdE2--_” 2 => “laravel:WwerTYmw2VNAfR5nKj3OOGBp2hKytSBK4MWMJ2P9” 3 =>“laravel:12tyuwzoFhXPM4f6w4yRPxrYywPon4W41neq6gu” ] 上面的输出包含 session ID 和其他缓存条目,在我的应用程序中我也使用 Redis 进行缓存。

问题是,除了作为缓存 key 的 laravel 之外,我如何为存储在 Redis 中的 session 提供不同的 key ?

最佳答案

session 缓存分开。

在文件\config\database.php

您可以设置许多 redis 连接,默认情况下有一个“default”,但您可以向其中添加更多

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

现在你需要利用它

转到文件“config\session.php”

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

然后转到文件config\cache.php

并将其设置为

    'redis' => [
        'driver'     => 'redis',
        'connection' => 'cache-connection',
    ],

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

use Illuminate\Support\Facades\Redis;
\Log::debug( Redis::connection('session-connection')->keys('*') );

关于php - Laravel 所有 session ID 与 Redis 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51305740/

相关文章:

php - 如何使用 API 将图片发布到 Instagram

php - 将字符串保存到数据库

从 Word 文档打开页面时 PHP session 未注册

PHP-将 $_POST 保存到 $_SESSION 问题

php - Laravel 5.3 $appends 不工作

javascript - 幻影 : take screenshot of the current page?

session - 如何通过phpunit上的所有测试保留 session ?

linux - CentOS配置Nginx加载Laravel 5.8 Site

php - Laravel 5 在 View 中访问自定义函数

php - 将变量与 $_SERVER ['PHP_SELF' ] 进行比较是否安全?