Laravel Session :: getId () отличается при входе и выходе - PullRequest
0 голосов
/ 02 июля 2019

у меня есть таблица user_logins для ведения нескольких регистрационных данных о пользователе

структура таблицы для user_logins:

    'session_id',
    'user_id',
    'ip_address',
    'user_agent',
    'browser_name',
    'location',
    'login_at',
    'is_active'

у меня есть UserEventSubscriber слушатель с 2функции как ниже:

public function handleUserLogin($event) {
     UserLogin::create([
        'session_id'=>Session::getId(),
        ...
     ]);
}   

я получаю Session::getId() = mpT6RDsl54JExkejrqf3fnYiFLzbR2pTb2qfNHBe в handleUserLogin функция

теперь, когда пользователь выходит из системы, я хочу обновить / удалить запись таблицы из таблицы user_logins, где session_id = Session:: getId ()

 public function handleUserLogout($event) {
        dd(Session::getId());
        //UserLogin::where('session_id',Session::getId())->delete();
 }

для функции handleUserLogout я получаю другой идентификатор сеанса

Session::getId() qLYngAx1Vs8VBhxm0oCKZO3fDwun02UEXRyDm0Hi, поэтому я не могу обновить / удалить запись в user_logins таблице

я видел sessions таблица имеет идентификатор qLYngAx1Vs8VBhxm0oCKZO3fDwun02UEXRyDm0Hi, который совпадает с идентификатором, который я получаю при выходе из системы.

, поэтому мой вопрос, почему я получаю другой идентификатор сеанса для функции входа пользователя?и что я должен сделать, чтобы получить тот же идентификатор сеанса, используя Session::getId() в handleUserLogin и handleUserLogout функции.

1 Ответ

0 голосов
/ 03 июля 2019

Я обнаружил, что необходимо переопределить sendLoginResponse из AuthenticatesUsers в Auth/LoginController

$request->session()->regenerate() генерирует новый идентификатор сеанса после входа в систему, поэтому, если вы хотите получить тот же идентификаторкак и прежде, закомментируйте эту строку.

 protected function sendLoginResponse(Request $request)
    {
        // $request->session()->regenerate();   <-- this line is generating new session after user login 
        $this->clearLoginAttempts($request);

        return $this->authenticated($request, $this->guard()->user())
                ?: redirect()->intended($this->redirectPath());
    }
...