Laravel, хранящий BIgInt в сеансе

#php #laravel #session

#php #laravel #сеанс

Вопрос:

Я пытаюсь сохранить некоторую информацию, связанную с пользователем, в сеансе, и это работает просто отлично, когда у пользователя нет идентификатора BigInteger, но когда они это делают, это просто не работает хорошо.

Когда я использую dd(); в маршруте, расположенном в web.php (GET Request) идентификатор отображается просто отлично, но когда я пытаюсь dd(); это где-то в другом месте, он просто возвращает null.

Например, у меня есть кнопка с надписью «Связать учетную запись», когда пользователь не вошел в систему, и предполагается, что она говорит «Выход», когда сеанс доступен.

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

Я подозреваю, что это связано с целочисленным типом, поскольку у всех остальных пользователей нет ни единой проблемы при выполнении каких-либо операций вообще.

Буду признателен за любую помощь, спасибо.

Процедура более или менее выглядит следующим образом.

Сохранение идентификатора в контроллере:

 $userId = 221345230; // The number looks like that x)
Session::put('userId', $userId);
 

Проверка идентификатора в промежуточном программном обеспечении:

 if(!session('userId')){
   return redirect("/");
}
 

Проверка идентификатора в представлении:

 @if(!session('userId'))
 <a>Link Account</a>
@else
 <a>Logout</a>
 

Комментарии:

1. можете ли вы показать, что вы делаете? это просто целое число для PHP

2. Я добавил несколько примеров кода, надеюсь, это поможет

3. похоже, у вас больше нет действительного сеанса, либо он сбрасывается, либо у вас есть новый сеанс для этого запроса

4. Да, все маршруты, которые получают ЗАПРОСЫ GET, находятся под web.php

5. Тем не менее, спасибо за вашу помощь.

Ответ №1:

Проблема заключалась в том, что я не изменил типы внутри пользовательской модели.

Это означает, что при выполнении запроса на получение пользовательских данных из базы данных модель отправляла целое число, а не строку, что не будет успешным при работе с BIGINT в MySQL.

Поэтому убедитесь, что вы меняете свои типы везде, где нужны ребята: D

Пример

 // Wrong
$user_id = 222234312432;
User::where("user_id", $user_id);

// Correct
$user_id = (string) 222234312432;
User::where("user_id", $user_id);