Попытка избежать дублирования записей сеанса пользователя в таблице сеанса: Laravel
Пример данных в этой таблице выглядит следующим образом:
![введите описание изображения здесь]()
В таблице есть несколько дублированных записей сеанса пользователя.
поставщика\Laravel\рамки\SRC\Осветите\Session\DatabaseSessionHandler.php
В приведенном выше пути к файлу мы имеем ниже метод
public function write($sessionId, $data)
{
$payload = $this->getDefaultPayload($data);
if (! $this->exists) {
$this->read($sessionId);
}
if ($this->exists) {
$this->getQuery()->where('id', $sessionId)->update($payload);
} else {
$payload['id'] = $sessionId;
$this->getQuery()->insert($payload);
}
$this->exists = true;
}
Он проверяет идентификатор сеанса.
Вопрос
Могу ли я избежать создания дубликатов записей сеанса пользователя в таблице сеансов? Есть ли флаг, который делает это в файле конфигурации сеанса?
Ответы
Ответ 1
Кажется, это ошибка в твоем обмане, должно быть так?
if (! $this->exists) {
$this->read($sessionId);
}else{
if ($this->exists) {
$this->getQuery()->where('id', $sessionId)->update($payload);
} else {
$payload['id'] = $sessionId;
$this->getQuery()->insert($payload);
}
}
Ответ 2
Из вашего вопроса вы хотите оставить только один сеанс пользователя в базе данных, что означает, что один пользователь может только войти с одного устройства, например, если вы уже вошли в систему из хрома, то, если вы входите в систему из firefox, ваш статус регистрации хрома будет удален.
Чтобы добиться этого, вы можете написать функцию в App\Http\Controllers\Auth\AuthController
:
public function authenticated(Request $request,User $user){
$previous_session = $user->session_id;
if ($previous_session) {
\Session::getHandler()->destroy($previous_session);
}
Auth::user()->session_id = \Session::getId();
Auth::user()->save();
return redirect()->intended($this->redirectPath());
}
эта функция будет уничтожать предварительный сеанс из базы данных до входа в систему.
для получения дополнительной информации вы должны проверить Trait: Illuminate\Foundation\Auth\AuthenticatesUsers