【发布时间】:2011-04-16 20:18:10
【问题描述】:
根据请求,您可以通过几种不同的方式判断会话是否已启动,例如:
$isSessionActive = (session_id() != "");
或者:
$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 添加了新功能以解决此问题:"Expose session status via new function, session_status"
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
编辑 12/5/11:session_status() 在 PHP 手册上。
【问题讨论】:
-
这可能有点骇人听闻:
session_is_active(),但至少我发现了一些东西。无论如何感谢您的错误报告,很高兴看到这个问题在 5.4 中得到解决。 -
关于 5.4 的添加仍然是一个相关的问题,因为我刚刚推到 5.3 的盒子,发现
session_status()不见了! -
这很奇怪,因为它确实存在于我的 5.4 版本中。你是说你用的是5.3还是5.4?它是自定义的还是预构建的 PHP 二进制文件?在
phpinfo(),你有“会话”部分吗?在行动:codepad.viper-7.com/PiZmcw