我在现有的小型 Web 应用程序的 PHP 标头中有以下内容。我的问题是:这不会使页面跳过一个额外的步骤来首先检查然后开始会话吗?这有什么意义?
如果会话存在,我不能只使用session_start
它,如果它不存在,它不会被忽略吗?
PHP
if (!isset($_SESSION)) {
session_start();
}
我在现有的小型 Web 应用程序的 PHP 标头中有以下内容。我的问题是:这不会使页面跳过一个额外的步骤来首先检查然后开始会话吗?这有什么意义?
如果会话存在,我不能只使用session_start
它,如果它不存在,它不会被忽略吗?
PHP
if (!isset($_SESSION)) {
session_start();
}
如果您调用 session_start() 并且不存在会话,它将创建一个新会话。如果存在现有会话,它将恢复该会话。
如果我没记错的话,$_SESSION
超全局将永远存在,所以你的代码无论如何也不会做太多事情。
如果您使用的是 PHP <5.4,请改用以下代码:
if (session_id() == "") {
session_start();
}
在 PHP 5.4+ 上,使用这个:
if(session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
您实际上应该只调用session_start()
一次,但正如@ScottHelme 所说,多次调用它不会产生负面影响,每次都会创建或恢复会话。