检查PHP会话是否已经开始

我有一个PHP文件,有时会从启动会话的页面调用,有时会从没有启动会话的页面调用。 因此,当我在此脚本上使用session_start() ,有时会收到“会话已启动”的错误消息。 为此,我把这些行:

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

但是这次我得到了这个警告信息:

注意:未定义变量:_SESSION

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

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


对于PHP> = 5.4.0版本的推荐方式

if (session_status() == PHP_SESSION_NONE) {
    session_start();
}

资料来源:http://www.php.net/manual/en/function.session-status.php

对于PHP版本<5.4.0

if(session_id() == '') {
    session_start();
}

对于PHP 5.4.0之前的PHP版本:

if(session_id() == '') {
    // session isn't started
}

虽然,恕我直言,如果你不知道会话是否开始,你应该考虑重构你的会话管理代码。

这就是说,我的观点是主观的,并且在某些情况下(下面的评论中描述了这些情况的例子),可能无法知道会话是否开始。


PHP 5.4引入了session_status(),比依靠session_id()更可靠。

考虑下面的代码片段:

session_id('test');
var_export(session_id() != ''); // true, but session is still not started!
var_export(session_status() == PHP_SESSION_ACTIVE); // false

因此,要检查会话是否已启动,现在在PHP 5.4中推荐使用以下方法:

session_status() == PHP_SESSION_ACTIVE
链接地址: http://www.djcxy.com/p/9901.html

上一篇: Check if PHP session has already started

下一篇: What does @ mean in PHP?