因此,我希望能够在PHP中判断会话当前是否处于活动状态。我认为使用session_status()
或session_id()
会很容易,但是两者都返回不确定的结果。
我的PHP看起来像这样
if (session_id() == "") {
echo json_encode("nope");
} else {
echo json_encode("yep");
}
if (session_status() === PHP_SESSION_DISABLED) {
echo json_encode("disabled");
} elseif (session_status() === PHP_SESSION_NONE) {
echo json_encode("none");
} else {
echo json_encode("active");
}
$handler = new DatabaseSessionHandler();
session_set_save_handler($handler, true);
session_start();
我有一个Angular应用程序对该脚本进行http调用,以基本上激活其会话。
我一直在对此进行测试,并且当我第一次访问该站点时,没有找到session_id
,而session_status()
返回了"none"
,因为它们都应该如此。但是问题是,当我刷新页面并运行该PHP脚本时,但是这次我有一个活动会话(PHP会话cookie在我的浏览器中显示),session_id
仍然表现为不存在。而且,session_status()
错误地返回了"none"
。
任何想法都将不胜感激,谢谢!
编辑1:一些人提到将session_start()
放在测试前面是否有效。当我这样做时,总是找到一个session_id
,而session_status()
总是返回"active"
。即使有新用户访问该网站,这种情况仍然会发生。
答案 0 :(得分:1)
在您致电x*x
之前,该会话不会处于活动状态,直到进行测试以查看该会话是否处于活动状态,您才进行该操作。
答案 1 :(得分:0)
您应该在页面顶部调用session_start()
,然后在其上执行条件。就您而言,您不是要开始会话,而是要对其进行测试。
答案 2 :(得分:-1)
我不确定这是否可以解决您的问题,但是您可以检查会话目录是否可写:
if (!is_writable(session_save_path())) {
echo 'Session path "'.session_save_path().'" is not writable for PHP!';
}
与此相关的问题位于PHP Session not Saving。
在其他地方尝试以下操作:
if (session_id() == "") {
session_start();
echo json_encode("nope");
} else {
echo json_encode("yep");
}