我有一个PHP文件,有时从一个已经开始会话的页面调用,有时从一个没有会话启动的页面调用。因此,当我在这个脚本上有session_start()时,我有时会得到“会话已经开始”的错误消息。为此,我写了以下几行:
if(!isset($_COOKIE["PHPSESSID"]))
{
session_start();
}
但这次我收到了警告信息:
注意:未定义变量:_SESSION
是否有更好的方法来检查会话是否已经开始?
如果我使用@session_start,它会使事情正常工作,只是关闭警告?
在PHP 5.4之前,除了设置一个全局标志,没有其他可靠的方法。
考虑:
var_dump($_SESSION); // null
session_start();
var_dump($_SESSION); // array
session_destroy();
var_dump($_SESSION); // array, but session isn't active.
Or:
session_id(); // returns empty string
session_start();
session_id(); // returns session hash
session_destroy();
session_id(); // returns empty string, ok, but then
session_id('foo'); // tell php the session id to use
session_id(); // returns 'foo', but no session is active.
因此,在PHP 5.4之前,您应该设置一个全局布尔值。
推荐的方法为版本的PHP >= 5.4.0, PHP 7, PHP 8
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();
}