1

我在现有的小型 Web 应用程序的 PHP 标头中有以下内容。我的问题是:这不会使页面跳过一个额外的步骤来首先检查然后开始会话吗?这有什么意义?

如果会话存在,我不能只使用session_start它,如果它不存在,它不会被忽略吗?

PHP

if (!isset($_SESSION)) {
   session_start();
}
4

2 回答 2

5

如果您调用 session_start() 并且不存在会话,它将创建一个新会话。如果存在现有会话,它将恢复该会话。

于 2013-08-08T14:02:34.350 回答
3

如果我没记错的话,$_SESSION超全局将永远存在,所以你的代码无论如何也不会做太多事情。

如果您使用的是 PHP <5.4,请改用以下代码:

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

在 PHP 5.4+ 上,使用这个:

if(session_status() != PHP_SESSION_ACTIVE) {
    session_start();
}

您实际上应该只调用session_start()一次,但正如@ScottHelme 所说,多次调用它不会产生负面影响,每次都会创建或恢复会话。

于 2013-08-08T14:19:15.680 回答