Quelle est la commande artisanale pour effacer toutes les données de session dans Laravel, je cherche quelque chose comme:
$ php artisan session:clear
Mais apparemment, cela n'existe pas. Comment pourrais-je l'effacer de la ligne de commande?
J'ai essayé d'utiliser
$ php artisan tinker
...
\Session::flush();
Mais cela vide la session d'un seul utilisateur, je veux vider toutes les sessions pour tous les utilisateurs. Comment puis-je le faire?
J'ai essayé ceci:
artisan cache:clear
Mais cela n'efface pas la session, encore une fois.
Ce fil est assez ancien. Mais je voudrais partager mon implémentation de la suppression de toutes les sessions pour le pilote basé sur un fichier.
$directory = 'storage/framework/sessions';
$ignoreFiles = ['.gitignore', '.', '..'];
$files = scandir($directory);
foreach ($files as $file) {
if(!in_array($file,$ignoreFiles)) unlink($directory . '/' . $file);
}
Pourquoi je n'ai pas utilisé la commande linux 'rm'?
Parce que PHP est l'une des conditions préalables pour Laravel et Linux ne l'est pas. L'utilisation de cette commande Linux rendra notre projet implémentable sur l'environnement Linux uniquement. C'est pourquoi il est bon à utiliser PHP dans Laravel.
Le problème est que SessionHandlerInterface
de Laravel n'oblige pas les pilotes de session à fournir n'importe quel type de méthode destroyAll()
. Ainsi, il doit être implémenté manuellement pour chaque pilote.
En prenant des idées à partir de différentes réponses, j'ai trouvé cette solution:
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
Les implémentations pour d'autres pilotes sont les bienvenues!