Проблема с сеансом Laravel/идентификатором сеанса

Я использовал сеанс в laravel, чтобы привязать неаутентифицированных пользователей к кавычкам. Но я столкнулся с проблемой, с которой я не могу справиться, и у меня есть ощущение, что это как-то связано с волшебными частями серверной части Laravel.

Вот мой код:

$session_id = session()->getId();

$booking = Booking::create([
    'trip_start_date' => $request->pickup_date,
    'trip_start_time' => $request->pickup_time,
    'token' => $session_id,
    'ip' => $request->ip(),
 ]);

 session()->put('at_token', $session_id);

Но тогда при проверке токенов в промежуточном программном обеспечении токены совершенно разные... как записано в моем файле:

AT_TOKEN       [pjIGjpuz0tRT0mjLTtdwgzTCDXrdwRCJssgJ1ukE]
BOOKING TOKEN  [3fcjAzdKTOv2IGy3Zw7skh2c9PqN9O9G98BVbAO0]

Я вижу, что токен в сеансе выглядит как идентификатор сеанса, но токен из БД, похоже, не похож на идентификатор сеанса... буду очень признателен за любую помощь.

Обновлено: промежуточное ПО... Хотя это явно работает, токены не совпадают, но при сохранении идентификатора сеанса в сеансе и в БД я использую одну и ту же переменную, так как они могут не совпадать?!

//user not logged in, check session
                if (session()->has('at_token')) {
                    $token = session()->get('at_token');
                    if ($token == $booking->token) {
                        //user has the token, give them access
                        return $next($request);
                    }else{
                        Log::info("AT_TOKEN [$token] DOES NOT EQUAL THE BOOKING TOKEN [$booking->token]");
                    }
                }else{
                    Log::info('NO AT_TOKEN');
                }

Можете ли вы показать реализацию промежуточного программного обеспечения?

Ujjwal Nepal 23.07.2019 14:22

Первоначально мы можем сказать, что сеанс настроен неправильно, или должна быть проблема с разрешением или что-то в этом роде. Это ведет себя странно, потому что сеанс не сохраняется, поэтому каждый раз, когда вы вызываете сеанс, вы получаете другой токен.

Ujjwal Nepal 23.07.2019 14:25

Добавлено промежуточное программное обеспечение @UjjwalNepal ... Но я использую одну и ту же переменную при присвоении значения сеансу и БД, так как они могут отличаться?

Liam G 23.07.2019 14:38
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
1
3
166
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Решение вашей проблемы здесь. https://laravel.com/docs/5.6/middleware#registering-middleware

также здесь https://laravel.com/docs/5.2/маршрутизация

В документе указано, что по умолчанию сеанс используется внутри промежуточного программного обеспеченияGroups, а не промежуточного программного обеспечения, которое не назначается маршрутам, а скорее назначается веб-промежуточному программному обеспечению. Таким образом, решение состоит в том, чтобы переместить линию

\Illuminate\Session\Middleware\StartSession::class,

к

protected $middleware = [
..........
\Illuminate\Session\Middleware\StartSession::class  
........
]

Теперь ваш сеанс будет сохраняться.

Идентификатор сеанса берется и сохраняется в переменной, которая затем сохраняется в сеансе и в БД в модели бронирования... Значение токена сеанса такое же, как идентификатор сеанса, тот, что в БД, кажется неправильный? Я действительно запутался с этим

Liam G 24.07.2019 10:46

На самом деле, только что сделал еще одну проверку, значение БД правильное... Попробую ваш метод и дам вам знать, как он работает

Liam G 24.07.2019 10:51

Спасибо за вашу помощь, я был слишком уверен, что токен сеанса был правильной версией, ошибка новичка!

Liam G 24.07.2019 10:54

Другие вопросы по теме