我没有打电话给session_start()
而php.ini有session.auto_start = 0
。
我仍然可以在没有任何错误的情况下为变量分配变量?没有设置cookie,但整个页面仍然可以使用范围。如果我没有启动会话,PHP是否会引发错误?
答案 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。