代码之家  ›  专栏  ›  技术社区  ›  SaidbakR

使用Redis驱动程序保存所有会话ID

  •  1
  • SaidbakR  · 技术社区  · 6 年前

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

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

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

    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::command('keys',['*']) 但是,它返回的输出如下:

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

    问题是,我如何给存储在redis中的会话提供不同的密钥,而不是 laravel 哪个是缓存键?

    1 回复  |  直到 6 年前
        1
  •  1
  •   Yevgeniy Afanasyev    6 年前

    session cache

    \config\database.php

    redis "default"

    'session-connection' 'cache-connection'

    'connection' => 'session-connection',

    config\cache.php

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

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