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

时间:2011-07-18 15:41:49

标签: php session

我没有打电话给session_start()而php.ini有session.auto_start = 0

我仍然可以在没有任何错误的情况下为变量分配变量?没有设置cookie,但整个页面仍然可以使用范围。如果我没有启动会话,PHP是否会引发错误?

3 个答案:

答案 0 :(得分:4)

由于$_SESSION是超全球,因此它始终可用于所有范围。

仅仅因为会话本身尚未使用浏览器进行初始化,这并不意味着此变量不存在。它仍然在那里等待使用,你可以随时存储它,但我的理解是,如果你写它,它将被消灭,然后初始化会话。 / p>

编辑:

此代码按预期生成two => Second

<?php
        $_SESSION['test'] = "string";
        session_start();
        $_SESSION['two'] = "Second";

        foreach( $_SESSION as $key => $val )
        {
                print $key . " => " . $val;
                print "<br />";
        }
?>

答案 1 :(得分:2)

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

答案 2 :(得分:0)

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

这同样适用于所有超级全球 - 它们总是可用的。有一个$ _POST数组,即使脚本是通过GET查询调用的,并且有一个$ _COOKIE数组,即使你在命令行上调用脚本而没有看到webserver。