在 PHP 中不启动会话的情况下分配给 $_SESSION 时预期会出现错误


Expecting errors when assigning to $_SESSION without starting a session in PHP

我不是在调用session_start()和php.ini session.auto_start = 0

我仍然可以将变量分配给范围而没有任何错误?未设置 Cookie,但范围在整个页面中仍然可用。如果我没有启动会话,PHP 应该引发错误吗?

由于 $_SESSION 是一个超全局变量,因此它始终在所有范围内可用。

仅仅因为会话本身尚未使用浏览器初始化,并不意味着此变量不存在。 它仍然在那里等待使用,您可以随时自由存储它,但我的理解是,如果您写入它,然后初始化会话,它将被清除。

编辑:

此代码会导致two => Second按预期进行。

<?php
        $_SESSION['test'] = "string";
        session_start();
        $_SESSION['two'] = "Second";
        foreach( $_SESSION as $key => $val )
        {
                print $key . " => " . $val;
                print "<br />";
        }
?>

您可以分配给$argc$argv尽管它们仅在 CLI 中定义;您可以分配给 $_FILES$_SERVER 甚至分配给 $GLOBALS 。所有这些都是变量,PHP 不会阻止你分配新值。由于它是一种动态语言,不需要变量声明,因此它不会阻止您初始化变量。但是,如果您在为其分配任何内容之前以及调用 session_start 之前尝试获取 $_SESSION 的值,它将为您提供'undefined variable' notice

$_SESSION 超级全局始终可用,无论您是否启动会话。唯一的区别是,如果您从未在代码中执行session_start(),或者没有通过.ini设置自动启动会话,则当脚本退出时,您放入 $_SESSION 的任何内容都将丢失。

这同样适用于所有超全局变量 - 它们始终可用。即使脚本是通过 GET 查询调用的,也有一个 $_POST 数组,并且有一个 $_COOKIE 数组,即使您在命令行上调用脚本而看不到 Web 服务器。