web-dev-qa-db-fra.com

Commande artisanale pour effacer toutes les données de session dans Laravel

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.

9

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.

0
Hamees A. Khan

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:

  1. Créer une commande
php artisan make:command FlushSessions 
  1. Créer une classe dans 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();
    }
}
  1. Exécuter la commande
php artisan session:flush

Les implémentations pour d'autres pilotes sont les bienvenues!

0
jotaelesalinas