Was ist der handwerkliche Befehl zum Löschen aller Sitzungsdaten in Laravel? Ich suche nach etwas wie:
$ php artisan session:clear
Aber anscheinend existiert es nicht. Wie würde ich es von der Kommandozeile löschen?
Ich habe es versucht
$ php artisan tinker
...
\Session::flush();
Aber es löscht die Sitzung nur eines Benutzers. Ich möchte alle Sitzungen für alle Benutzer leeren. Wie kann ich es tun?
Ich habe es versucht:
artisan cache:clear
Aber es klärt die Sitzung nicht wieder.
Dieser Thread ist ziemlich alt. Ich möchte jedoch meine Implementierung zum Entfernen aller Sitzungen für dateibasierte Treiber teilen.
$directory = 'storage/framework/sessions';
$ignoreFiles = ['.gitignore', '.', '..'];
$files = scandir($directory);
foreach ($files as $file) {
if(!in_array($file,$ignoreFiles)) unlink($directory . '/' . $file);
}
Warum habe ich den Linux-Befehl 'rm' nicht verwendet?
Denn PHP ist eine der Voraussetzungen für Laravel und Linux nicht. Mit diesem Linux-Befehl kann unser Projekt nur in einer Linux-Umgebung implementiert werden. Deshalb ist dies der Fall gut zu verwenden PHP in Laravel.
Das Problem ist, dass Laravels SessionHandlerInterface
Sitzungstreiber nicht dazu zwingt, irgendeine Art von destroyAll()
-Methode bereitzustellen. Daher muss es für jeden Treiber manuell implementiert werden.
Ich nahm Ideen aus verschiedenen Antworten und fand diese Lösung:
php artisan make:command FlushSessions
app/Console/Commands/FlushSessions.php
<?php
namespace App\Console\Commands;
use Illuminate\Console\Command;
class FlushSessions extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'session:flush';
/**
* The console command description.
*
* @var string
*/
protected $description = 'Flush all user sessions';
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
/**
* Execute the console command.
*
* @return mixed
*/
public function handle()
{
$driver = config('session.driver');
$method_name = 'clean' . ucfirst($driver);
if ( method_exists($this, $method_name) ) {
try {
$this->$method_name();
$this->info('Session data cleaned.');
} catch (\Exception $e) {
$this->error($e->getMessage());
}
} else {
$this->error("Sorry, I don't know how to clean the sessions of the driver '{$driver}'.");
}
}
protected function cleanFile () {
$directory = config('session.files');
$ignoreFiles = ['.gitignore', '.', '..'];
$files = scandir($directory);
foreach ( $files as $file ) {
if( !in_array($file,$ignoreFiles) ) {
unlink($directory . '/' . $file);
}
}
}
protected function cleanDatabase () {
$table = config('session.table');
DB::table($table)->truncate();
}
}
php artisan session:flush
Implementierungen für andere Treiber sind willkommen!