php - 如果不在全局范围内,则未设置会话变量
问题描述
我正在尝试使用一系列方法和会话来制作登录系统。这是它的工作原理:
- 用户通过 XHR 向 domain.com/api/login 发出 POST 请求
- Nginx 对 domain.com/api.php?request=url 进行了重写
- File 运行一些验证,如果一切正常,它会实例化目标类,然后使用
call_user_func_array
新实例化的对象调用目标方法。 - 调用方法 is
UsersController->logIn
,该方法运行一些验证,然后调用UsersModel::Condition
which 最简单的说法是选择用户并返回一个包含用户属性和一些方法的对象。 - 然后,我们运行
$instanceOfUserRow->LogIn()
,它会更新该last_logged
用户的列,并实例化正在执行的会话$_SESSION['user_id'] = $this->user_id
。
但是,无论我尝试什么,它都不会设置会话变量。我尝试了以下方法:
- 将变量命名为不同的,从
user_id
toidentifier
, toid_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
。
任何帮助或线索都会有所帮助。谢谢你。
解决方案
事实证明,即使几乎所有内容都相同,我正在使用HTTPS查询 API ,但请求是从不通过 TLS 的页面发出的。
所以请求是从http://website.lan
to发出的https://website.lan/api
,这导致会话在请求之间发生变化。
推荐阅读
- android - 一个适配器用于不同的视图和活动
- javascript - MapBox JS Gl:未捕获的类型错误:无法读取未定义的属性“x”
- groovy - 在脚本覆盖选项期间观察到 jmeter 时间戳函数的 groovy 编译错误
- html - 在角度应用程序中每 5 秒更改一次 div 中的图像
- firebase - 如何在 Flutter 中对齐字符串?
- r - 访问和使用在分组数据时生成的值
- javascript - 如何验证用户编写的 PGP 公钥?
- oracle - 以后如何定义游标?
- angular - Internet Explorer 11(Windows-10) 不显示明亮的视频
- jmeter - 使用中频控制器