webentwicklung-frage-antwort-db.com.de

Artisan-Befehl zum Löschen aller Sitzungsdaten in Laravel

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.

9

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.

0
Hamees A. Khan

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:

  1. Befehl erstellen
php artisan make:command FlushSessions 
  1. Klasse erstellen in 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. Führen Sie den Befehl aus
php artisan session:flush

Implementierungen für andere Treiber sind willkommen!

0
jotaelesalinas