我有一个PHP文件,有时从一个已经开始会话的页面调用,有时从一个没有会话启动的页面调用。因此,当我在这个脚本上有session_start()时,我有时会得到“会话已经开始”的错误消息。为此,我写了以下几行:

if(!isset($_COOKIE["PHPSESSID"]))
{
  session_start();
}

但这次我收到了警告信息:

注意:未定义变量:_SESSION

是否有更好的方法来检查会话是否已经开始?

如果我使用@session_start,它会使事情正常工作,只是关闭警告?


当前回答

最后我对状态进行了两次检查。php 5.4 +

if(session_status() !== PHP_SESSION_ACTIVE){session_start();};
if(session_status() !== PHP_SESSION_ACTIVE){die('session start failed');};

其他回答

你可以这样做,而且非常简单。

if (!isset($_SESSION)) session_start();

PHP_VERSION_ID从PHP 5.2.7开始可用,所以首先检查它,如果有必要,创建它。 session_status在PHP 5.4就可用了,所以我们也要检查这个:

if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);
    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}else{
    $version = PHP_VERSION_ID;
}
if($version < 50400){
    if(session_id() == '') {
        session_start();
    }
}else{
    if (session_status() !== PHP_SESSION_ACTIVE) {
        session_start();
    }
}

在PHP 5.3这为我工作:

if(!strlen(session_id())){
    session_name('someSpecialName');
    session_start();
} 

然后你有。如果你不把不放在If语句开始会话将以任何方式开始我不知道为什么。

适用于所有php版本

if ((function_exists('session_status') 
  && session_status() !== PHP_SESSION_ACTIVE) || !session_id()) {
  session_start();
}

这个代码片段适合您吗?

if (!count($_SESSION)>0) {
    session_start();
}