#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);