检查PHP会话是否已启动

2022-08-30 05:52:08

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

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

但这次我收到了这个警告消息:

注意:未定义的变量:_SESSION

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

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


答案 1

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();
}

答案 2

对于 PHP 5.4.0 之前的 PHP 版本:

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

不过,恕我直言,如果您不知道会话是否启动,您应该真正考虑重构会话管理代码...

也就是说,我的观点是主观的,在某些情况下(其示例在下面的评论中描述),可能无法知道会话是否启动。


推荐