gleber1
@gleber1

Как почистить сессию в laravel?

Речь идет не о чистке своей сессии(только это и описано в доках как делать), а про удаление чужой сессии.
То есть как почистить сессию по ид а не по текущему пользователю?
  • Вопрос задан
  • 4546 просмотров
Решения вопроса 1
Denormalization
@Denormalization
В общем я наврал, есть возможность сделать это стандартными средствами (не проснулся пока писал первое сообщение).

В Laravel все драйверы сессий реализуют SessionHandlerInterface.

Получить хэндлер можно с помощью:
session()->getHandler();

Получить ID текущей сессии можно с помощью:
session()->getID();

Таким образом нам нужно сделать следующее:
- Когда пользователь входит в систему, получить ID его сессии и сохранить его в БД (например добавить в таблицу users поле sesison_id).
- Когда админу нужно разлогинить пользователя, нужно просто вызвать:
$user = // получаем юзера;
session()->getHandler()->destroy($user->session_id);


Метод destroy удалит сессию пользователя, и его выкинет из системы.
Не проверял, но должно работать.

Можно сделать иначе. Когда нужно выкинуть юзера из системы, можно записывать в сессию параметр (например should_logout = true).
Добавить middleware, который при каждом запросе будет проверять есть ли в сессии этот параметр, и если есть, то удалять сессию.

Второй вариант более универсальный, так как позволяет сделать какие-то действия перед тем как юзера выкинет из системы (например сохранить часть данных из сессии в БД, если это необходимо).
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
sanchezzzhak
@sanchezzzhak
Ля ля ля...
Удалить файл сессии если хранение сессии в файлах, если в БД то из БД удалить.

<?php
$pathFile = rtrim(ini_get('session.save_path'),'/').'/' . $sessionId;
if(file_exists($pathFile)){
	echo "File exists!";
	//unlink($pathFile);   
}


Главное чтоб область видимость папок не было ограничено если апач + open_basedir придется конфиг править
open_basedir none ставить.
Ответ написан
@Nc_Soft
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы