根据请求,您可以通过几种不同的方式来判断会话是否已启动,例如:
$isSessionActive = (session_id() != "");
Or:
$isSessionActive = defined('SID');
然而,如果您启动一个会话然后关闭它,这两种方法都会失败。session_id()
将返回前一个会话的 ID,同时SID
将被定义。同样,调用session_start()
此时会生成一个E_NOTICE
如果您已经有一个活动会话。有没有一种明智的方法来检查会话当前是否处于活动状态,而不必诉诸输出缓冲,关闭运算符(@session_start()
),或者其他同样hacky的东西?
编辑:我编写了一个补丁来尝试将此功能包含在 PHP 中:http://bugs.php.net/bug.php?id=52982
编辑 2011 年 8 月 29 日:PHP 5.4 中添加了新函数来解决此问题:“通过新函数 session_status 公开会话状态”
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
2011 年 12 月 5 日编辑:会话状态()在 PHP 手册上。
查看对原始问题的编辑;基本上,PHP 5.4 及更高版本现在有一个名为session_status()来解决这个问题!
“通过新函数 session_status 公开会话状态”(SVN 修订版 315745)
如果您在 PHP 5.4 之前的版本中需要此功能,请参阅哈克雷的回答.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)