Как почистить сессию в laravel?
В общем я наврал, есть возможность сделать это стандартными средствами (не проснулся пока писал первое сообщение).
В Laravel все драйверы сессий реализуют SessionHandlerInterface.
Получить хэндлер можно с помощью:session()->getHandler();
Получить ID текущей сессии можно с помощью:session()->getID();
Таким образом нам нужно сделать следующее:
- Когда пользователь входит в систему, получить ID его сессии и сохранить его в БД (например добавить в таблицу users поле sesison_id).
- Когда админу нужно разлогинить пользователя, нужно просто вызвать:$user = // получаем юзера;
session()->getHandler()->destroy($user->session_id);
Метод destroy удалит сессию пользователя, и его выкинет из системы.
Не проверял, но должно работать.
Можно сделать иначе. Когда нужно выкинуть юзера из системы, можно записывать в сессию параметр (например should_logout = true).
Добавить middleware, который при каждом запросе будет проверять есть ли в сессии этот параметр, и если есть, то удалять сессию.
Второй вариант более универсальный, так как позволяет сделать какие-то действия перед тем как юзера выкинет из системы (например сохранить часть данных из сессии в БД, если это необходимо).
Удалить файл сессии если хранение сессии в файлах, если в БД то из БД удалить.<?php
$pathFile = rtrim(ini_get('session.save_path'),'/').'/' . $sessionId;
if(file_exists($pathFile)){
	echo "File exists!";
	//unlink($pathFile);   
}
Главное чтоб область видимость папок не было ограничено если апач + open_basedir придется конфиг править
open_basedir none ставить.