根据请求,您可以通过几种不同的方式判断会话是否已启动,例如:
$isSessionActive = (session_id() != "");
Run Code Online (Sandbox Code Playgroud)
要么:
$isSessionActive = defined('SID');
Run Code Online (Sandbox Code Playgroud)
但是,如果你开始一个会话,然后关闭它们,它们都会失败; session_id()将返回先前会话的ID,同时SID将定义.同样,如果您已经激活会话,此时调用session_start()将生成一个E_NOTICE.是否有一种理智的方法来检查会话当前是否处于活动状态,而不必求助于输出缓冲,关闭运算符(@session_start())或其他类似hacky的东西?
编辑:我写了一个补丁试图让这个功能包含在PHP中:http://bugs.php.net/bug.php?id = 52982
编辑8/29/2011:添加到PHP 5.4的新功能修复此问题:"通过新函数,session_status公开会话状态"
// as of 8/29/2011
$isSessionActive = (session_status() == PHP_SESSION_ACTIVE);
Run Code Online (Sandbox Code Playgroud)
编辑12/5/11:PHP手册上的session_status().
我们为客户锁定了一些库存,锁定库存的表包含将其锁定的会话ID以及有关客户端的其他信息.当会话到期时,我们想要解锁该库存,以便其他人可以购买它.因为我们在表中注册了session_id(),知道它,有没有办法检查会话在PHP中是否仍然有效?
如果我们使用数据库来保持会话,我们可以检查行是否到那里以及最后一个活动是什么时候,在memcached中我们可以找出会话的密钥并检查它,就像文件会话一样我们可以这样做,找出会话的文件名并检查文件是否存在.
无论你在哪里举行会议,有什么东西可以在任何地方使用吗?