Переменная сеанса не устанавливается, если не находится в глобальной области видимости

Я пытаюсь создать систему входа в систему, используя ряд методов и сеансов. Вот как это работает:

  1. Пользователь отправляет POST-запрос через XHR на domain.com/api/login
  2. Nginx выполняет перезапись на domain.com/api.php?request=url
  3. Файл выполняет некоторые проверки, и если все в порядке, он создает экземпляр целевого класса, а затем использует call_user_func_array для вызова целевого метода с вновь созданным объектом.
  4. Вызываемый метод - UsersController->logIn, этот метод выполняет некоторые проверки, а затем вызывает UsersModel::Condition, который, говоря простыми словами, выбирает пользователя и возвращает объект со свойствами пользователя и несколькими методами.
  5. Затем мы запускаем $instanceOfUserRow->LogIn(), который обновляет столбец last_logged этого пользователя, а также создает экземпляр сеанса, выполняющего $_SESSION['user_id'] = $this->user_id.

Однако, что бы я ни пытался, он просто не установит переменную сеанса. Я пробовал следующее:

  • Называть переменную по-разному, от user_id до identifier, до id_test и т. д.
  • Вместо того, чтобы устанавливать его в методе UserRow->LogIn, установите его напрямую в UsersController->logIn, что также не сработало.
  • Создал переменную сеанса в основном файле моей структуры (названном Init.php) под названием test.
  • Эта переменная сеанса была установлена ​​успешно и вела себя правильно, и поведение было таким же, если я переименовал ее в user_id, что мне показалось странным.
  • Создал простую функцию session_start, которая была объявлена ​​сразу после Init.php в файле set_session, которая просто взяла имя и значение и установила такой сеанс: $_SESSION[$name] = $value;. Это тоже не сработало.

На данный момент я понятия не имею, что делать, я убедился, что сеанс был активен, используя session_status, прежде чем устанавливать любую новую переменную. Классы загружаются с использованием настраиваемой автозагрузки. Я не уверен, что виноват в том, сколько файлов мы пересылаем (исходный запрос был API / логином, затем переписывался на api.php, затем UsersController.php, затем UsersModel.php и затем UserRow.php), или если это может быть просто факт, что он вызывается через call_user_func_array.

Любая помощь или подсказки действительно помогут. Спасибо.

Вы вызывали session_start () перед назначением сеанса?

Progrock 06.06.2018 18:55

Находится ли сеанс в другом домене от того, где он вам нужен?

Progrock 06.06.2018 18:56

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

CristianHG 06.06.2018 19:00
Стоит ли изучать 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 и хотите разрабатывать...
0
3
50
1

Ответы 1

Оказывается, хотя почти все было одинаково, я запрашивал API с помощью HTTPS, но запрос был сделан со страницы, которая не была поверх TLS.

Таким образом, запросы делались от http://website.lan к https://website.lan/api, и это привело к изменению сеанса между запросами.

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