Как сделать недействительным конкретный сеанс в Laravel (с пользователем, использующим функцию запомнить меня) - PullRequest
0 голосов
/ 03 мая 2018

Использование Laravel 5.1 & 'file' Session Driver ,

Я пытаюсь предоставить пользователю возможность отслеживать свои сеансы и делать их недействительными в любое время, когда они хотят, сохраняя запись их session_id в базе данных. Я имею в виду, что с базой данных у меня есть таблица с именем user_sessions, которая связывает user_id с их session_id (полученным Session::getId()).

Итак, чтобы сделать Сессию недействительной, я попробовал следующий код,

$sessionId = Session::getId();
Session::setId($sessionId);
Session::invalidate();

и он прекрасно работает, в случае, если , когда пользователь не использует функцию «Помни меня».

Для случая, когда пользователь использует Функция «Запомнить меня» , указанный выше код не работает , поэтому я дополнительно попытался установить поле remember_token в null, как указано здесь в этот ответ , но при этом все сеансы пользователя уничтожаются, включая текущий.

Ответы [ 2 ]

0 голосов
/ 04 мая 2018

Сессии должны быть кратковременными. Если вы хотите что-то более постоянное, вы можете использовать какую-то таблицу долгосрочных пользовательских настроек.

Создать таблицу user_settings:

id (PK), user_id(FK users table), settings(BLOB?), created_at, updated_at

Добавить модель:

class UserSetting extends Model {
      public function user() {
            return $this->belongsTo(User::class);
      }
}

Вы также можете связать пользователя с этим через:

 class User extends Model {
 //...
     public function settings() {
         $this->hasMany(UserSetting::class);
     }
 }

Затем вы можете получить все сеансы пользователя через:

 User::find($u)->settings();

Когда пользователь входит в систему регулярно или автоматически через токен запоминания, происходит событие Login.

Вы можете прослушать это у поставщика услуг по организации мероприятий:

\Event::listen(\Illuminate\Auth\Events\Login::class, function ($event) {
       // Here you can load the last settings in the session if you want e.g. 
       session(['current_settings' => $event->user->settings()->latest()->value('id') ]); 
        // or you can just make a new entry: 
        $settings = new UserSettings();
        $event->user->settings()->save($settings);
        session(['current_settings' => $settings->id ]);
});

Обратите внимание, что вам придется вручную сохранять вещи, которые нужно сохранить, а не просто помещать их в сеанс.

0 голосов
/ 03 мая 2018

Вы можете просто использовать

use Illuminate\Support\Facades\Session;

Session::forget('YOUR_SESSION_ID');

Если вы хотите получить текущий идентификатор сессии:

Session::driver()->getId();

Надеюсь, это поможет

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...