无法确定会话在PHP中何时处于活动状态

时间:2018-08-12 03:36:06

标签: php session

因此,我希望能够在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"。即使有新用户访问该网站,这种情况仍然会发生。

3 个答案:

答案 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");
}