如何在没有活动会话的情况下停止session_status()报告PHP_session_ACTIVE


How do I stop session_status() from reporting PHP_SESSION_ACTIVE with no active sessions?

所以我试图登录和注销我的网站,同时在注销时限制对网站所有部分的访问。以下是我初始化会话的方法:

session_name('my_session');
session_start();
session_save_path('/tmp');

我设置了一些vars,然后我破坏了我的会话:

session_name('my_session');
session_start();
session_destroy();
session_write_close();
unset($_SESSION['var1']);
unset($_SESSION['var2']);

然后,我在我的网站上的一个正常页面上运行session_status():

if (session_status() == PHP_SESSION_ACTIVE) {
    die('A session is still active.');
}

如果说还有一个会议要开,那就真的死了。

现在,如果我有一些未命名的会话,我可以理解,但我已经重新启动了Apache两次,并删除了/tmp中的会话文件。我还能做些什么来否定会话?

您可以使用session_write_close来尝试吗?因为session_delete将在脚本结束时结束会话。

如果你想确保销毁会话,你可以使用session_regenerate_id,这将用一个新的空会话覆盖当前会话。

在我的经验中,另一个常见的问题是,如果您的注销页面与相同的域cookie规则不匹配,并且无法将其从该页面中删除。