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

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

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

注意:未定义变量:_SESSION

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

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


当前回答

你唯一需要做的就是:

<?php
if(!isset($_SESSION))
{
session_start();
}
?>

其他回答

使用session_id(),如果没有设置,它将返回一个空字符串。它比检查$_COOKIE更可靠。

if (strlen(session_id()) < 1) {
    session_start();
}

最简单的方法:

(session_status()==2)?:session_start();

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

if (!isset($_SESSION)) session_start();
session_start();
if(!empty($_SESSION['user']))
{     
  //code;
}
else
{
    header("location:index.php");
}

不确定这样的解决方案的效率,但这是从工作项目 如果需要定义默认语言,也可以使用这种方法

   /**
    * Start session
    * Fall back to ukrainian language
    */
   function valid_session() {
    if(session_id()=='') {
        session_start();
        $_SESSION['lang']='uk';
        $_SESSION['lang_id']=3;
    }
    return true;
  }