首页 > 解决方案 > 如果不在全局范围内,则未设置会话变量

问题描述

我正在尝试使用一系列方法和会话来制作登录系统。这是它的工作原理:

  1. 用户通过 XHR 向 domain.com/api/login 发出 POST 请求
  2. Nginx 对 domain.com/api.php?request=url 进行了重写
  3. File 运行一些验证,如果一切正常,它会实例化目标类,然后使用call_user_func_array新实例化的对象调用目标方法。
  4. 调用方法 is UsersController->logIn,该方法运行一些验证,然后调用UsersModel::Conditionwhich 最简单的说法是选择用户并返回一个包含用户属性和一些方法的对象。
  5. 然后,我们运行$instanceOfUserRow->LogIn(),它会更新该last_logged用户的列,并实例化正在执行的会话$_SESSION['user_id'] = $this->user_id

但是,无论我尝试什么,它都不会设置会话变量。我尝试了以下方法:

此时我不知道该怎么做,我确实session_status在设置任何新变量之前验证了会话是否处于活动状态。使用自定义自动加载加载类。我不确定罪魁祸首是否是我们分层的文件数量(从原始请求是 API/登录,然后重写为 api.php,然后是 UsersController.php,然后是 UsersModel.php,然后是 UserRow.php)或者如果它可能只是通过调用它的事实call_user_func_array

任何帮助或线索都会有所帮助。谢谢你。

标签: phpsession

解决方案


事实证明,即使几乎所有内容都相同,我正在使用HTTPS查询 API ,但请求是从不通过 TLS 的页面发出的。

所以请求是从http://website.lanto发出的https://website.lan/api,这导致会话在请求之间发生变化。


推荐阅读