Laravel 具有 Redis driver 的所有会话 ID
Laravel all sessions IDs with Redis driver
在我的应用程序中,我希望允许某些用户能够注销除 him/her 之外的所有其他用户。我已经完成了这个功能,嗯,当 Session driver 被设置为文件时,但现在我使用 redis 作为 session driver 我可以无法找到任何方法来列出所有当前 session,就像我在文件 driver.
时所做的那样
问题是:如何在将redis用作session时列出所有session的ID driver ?
以下是我在 session driver 文件时使用的代码:
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',['*'])
然而,它 returns 输出看起来像:
array:4 [▼
0 => "laravel:cav17Job1_7l46wAdE2--__"
1 => "laravel:cav17Job1_7l46wAdE2--_"
2 => "laravel:WwerTYmw2VNAfR5nKj3OOGBp2hKytSBK4MWMJ2P9"
3 => "laravel:12tyuwzoFhXPM4f6w4yRPxrYywPon4W41neq6gu"
]
上面的输出包含 sessions ids 和其他缓存条目,在我的应用程序中我也使用 Redis 作为缓存。
问题变成了,我怎么能给 sessions 存储在 redis 中的不同的键而不是 laravel
这是缓存键?
将您的 session
和 cache
分开。
在文件中\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会话记录了。
use Illuminate\Support\Facades\Redis;
\Log::debug( Redis::connection('session-connection')->keys('*') );
在我的应用程序中,我希望允许某些用户能够注销除 him/her 之外的所有其他用户。我已经完成了这个功能,嗯,当 Session driver 被设置为文件时,但现在我使用 redis 作为 session driver 我可以无法找到任何方法来列出所有当前 session,就像我在文件 driver.
时所做的那样问题是:如何在将redis用作session时列出所有session的ID driver ?
以下是我在 session driver 文件时使用的代码:
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',['*'])
然而,它 returns 输出看起来像:
array:4 [▼
0 => "laravel:cav17Job1_7l46wAdE2--__"
1 => "laravel:cav17Job1_7l46wAdE2--_"
2 => "laravel:WwerTYmw2VNAfR5nKj3OOGBp2hKytSBK4MWMJ2P9"
3 => "laravel:12tyuwzoFhXPM4f6w4yRPxrYywPon4W41neq6gu"
]
上面的输出包含 sessions ids 和其他缓存条目,在我的应用程序中我也使用 Redis 作为缓存。
问题变成了,我怎么能给 sessions 存储在 redis 中的不同的键而不是 laravel
这是缓存键?
将您的 session
和 cache
分开。
在文件中\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会话记录了。
use Illuminate\Support\Facades\Redis;
\Log::debug( Redis::connection('session-connection')->keys('*') );