【发布时间】:2018-06-07 01:09:19
【问题描述】:
我正在尝试使用一系列方法和会话来制作登录系统。它是这样工作的:
- 用户通过 XHR 向 domain.com/api/login 发出 POST 请求
- Nginx 对 domain.com/api.php?request=url 进行了重写
- 文件运行一些验证,如果一切正常,它会实例化目标类,然后使用
call_user_func_array用新实例化的对象调用目标方法。 - 调用的方法是
UsersController->logIn,该方法运行一些验证,然后调用UsersModel::Condition,简单来说就是选择用户并返回一个包含用户属性和一些方法的对象。 - 然后,我们运行
$instanceOfUserRow->LogIn(),它会更新该用户的last_logged列并实例化执行$_SESSION['user_id'] = $this->user_id的会话。
但是,无论我尝试什么,它都不会设置会话变量。我尝试了以下方法:
- 为变量命名不同,从
user_id到identifier,再到id_test,等等。 - 不要在
UserRow->LogIn方法中设置,而是直接在UsersController->logIn中设置,同样无效 - 在我的框架的主文件(称为
Init.php)中创建了一个名为test的会话变量。 - 这个会话变量设置成功并且行为正确,如果我把它重命名为
user_id,行为是一样的,我觉得这很奇怪。 - 创建了一个简单的函数,该函数在名为
Init.php的文件set_session中的session_start之后声明,该函数只需获取名称和值并设置如下所示的会话:$_SESSION[$name] = $value;。这也没有用。
此时我不知道该怎么做,在设置任何新变量之前,我确实使用session_status 验证了会话是否处于活动状态。使用自定义自动加载加载类。我不确定罪魁祸首是否是我们分层的文件数量(从原始请求是 API/登录,然后重写为 api.php,然后是 UsersController.php,然后是 UsersModel.php,然后是 UserRow.php)或者如果它可能只是通过call_user_func_array 调用它的事实。
任何帮助或线索都会有所帮助。谢谢。
【问题讨论】:
-
你在分配给你的会话之前调用了 session_start() 吗?
-
会话是否与您需要的域不同?
-
是的,就像我在帖子前面所说的那样,我什至在设置新变量之前使用
session_status确保会话处于活动状态。域是相同的。