Переменная сеанса не устанавливается, если не находится в глобальной области видимости - PullRequest
0 голосов
/ 06 июня 2018

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

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

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

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

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

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

1 Ответ

0 голосов
/ 06 июня 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...