如何判断会话是否处于活动状态?
对于每个请求,您可以通过几种不同的方式判断会话是否已启动,例如:
$isSessionActive = (session_id() != "");
艺术
$isSessionActive = defined('SID');
但是,如果您启动会话,然后将其关闭,则这两者都会失败。 将返回上一个会话的 ID,而将定义。同样,此时调用将生成一个会话(如果已处于活动状态)。有没有一种合理的方法来检查会话当前是否处于活动状态,而不必诉诸输出缓冲,闭嘴运算符()或其他同样黑客化的东西?session_id()
SID
session_start()
E_NOTICE
@session_start()
编辑:我写了一个补丁来尝试将此功能包含在PHP中:http://bugs.php.net/bug.php?id=52982
EDIT 8/29/2011: PHP 5.4 中添加了新功能来修复此问题:“通过新功能公开会话状态,session_status”
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
编辑 12/5/11: session_status() 在 PHP 手册上。