一尘不染

如何判断会话是否处于活动状态?

php

对于每个请求,您可以通过几种不同的方式来判断会话是否已经开始,例如:

$isSessionActive = (session_id() != "");

要么:

$isSessionActive = defined('SID');

但是,如果您启动会话然后将其关闭,它们都将失败。session_id()将返回前一个会话的ID,同时SID将对其进行定义。同样,如果您已经有一个活动会话,则此时调用session_start()将生成一个E_NOTICE。有没有一种明智的方法来检查会话当前是否处于活动状态,而不必诉诸输出缓冲,关闭运算符(@session_start())或其他类似hacky的方法?

编辑8/29/2011:向PHP 5.4添加了新功能来解决此问题:“通过新功能session_status公开会话状态”

// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);

编辑12/5/11:PHP手册上的session_status()


阅读 544

收藏
2020-05-29

共1个答案

一尘不染

查看对原始问题的修改;基本上,PHP
5.4及更高版本现在具有session_status()解决此问题的功能!

“通过新功能session_status公开会话状态”(SVN修订版315745)

2020-05-29