如果不在全局范围内,则不会设置会话变量

时间:2018-06-06 16:50:47

标签: php session

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

  1. 用户通过XHR向domain.com/api/login
  2. 发出POST请求
  3. Nginx重写了domain.com/api.php?request=url
  4. 文件运行一些验证,如果一切正常,它会实例化目标类,然后使用call_user_func_array使用新实例化的对象调用目标方法。
  5. 调用的方法是UsersController->logIn,此方法运行一些验证,然后调用UsersModel::Condition,用最简单的术语选择用户并返回一个包含用户属性和一些方法的对象。
  6. 然后,我们运行$instanceOfUserRow->LogIn(),它会更新该用户的last_logged列并实例化$_SESSION['user_id'] = $this->user_id会话。
  7. 然而,无论我尝试什么,它都不会设置会话变量。我尝试了以下方法:

    • 将变量命名为不同,从user_ididentifier,再到id_test等等。
    • 不是在UserRow->LogIn方法中进行设置,而是直接在UsersController->logIn中设置,但也无效
    • 在我的框架的主文件(名为Init.php)中创建了一个名为test的会话变量。
    • 此会话变量已成功设置且行为正确,如果我将其重命名为user_id,行为是相同的,我认为这很奇怪。
    • 创建了一个简单的函数,该函数在名为session_start的{​​{1}}文件中的Init.php之后立即声明,该文件只是取名称和值并设置如下会话:{{1} }。这也行不通。

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

    任何帮助或潜在客户都会有所帮助。谢谢。

1 个答案:

答案 0 :(得分:0)

即使几乎所有内容都相同,我也会使用 HTTPS 查询API,但请求是从未通过TLS的页面发出的。

因此,请求从http://website.lan发送到https://website.lan/api,这导致会话在请求之间发生变化。