level 6
我在test1.php里只写了$_SESSION['test']=1;没有写其他的,在test2.php里写了 echo $_SESSION['test'],执行test1.php的时候不错报错,而执行test2.php的时候则会报错“Undefined variable: _SESSION”,但在test2.php头部加上session_start()就不会报错了。
为什么test1.php也没有session_start(),在设置session的时候却不会报错? session.auto_start()没有开启。
2016年09月01日 05点09分
1
level 11
------当会话自动开始或者通过 session_start() 手动开始的时候, PHP 内部会调用会话管理器的 open 和 read 回调函数。 会话管理器可能是 PHP 默认的, 也可能是扩展提供的(SQLite 或者 Memcached 扩展), 也可能是通过 session_set_save_handler() 设定的用户自定义会话管理器。 通过 read 回调函数返回的现有会话数据(使用特殊的序列化格式存储), PHP 会自动反序列化数据并且填充 $_SESSION 超级全局变量。--------
---------------------------------------------------------------------------------------------------------------
----------------------------------------------------------------------------------------------------------------
以上是官方手册上写的。明白?
就是说,如果你不开启session_start(); 你写的$_SESSION['test']=1;不论把$_SESSION,换成$_POST,$_GET;都是成立的。简单的说,就是直接把_SESSION['test']声明为一个变量。
---------------------
如果,你开启session, 在输出$_SESSION['test'];就会提示test这个字段不存在。
-------------------------
所以,明白了?
==================结论======================
----------------没事多看看手册----------------
2016年09月01日 06点09分
10
比如,我在echo $_SESSION['name']前面,先随便echo个值,再写session_start(),然后 再echo$_SESSION['name'],这样也不会报错,不是说在session_start()前面有值输出的话,就会有这样的提示吗?‘Warning: Cannot send session cache limiter ’
2016年09月01日 07点09分
回复
在无知中逝去
:“不是说”------谁说的?
2016年09月01日 07点09分
回复
在无知中逝去
:自己写一个,运行一下不就知道了。
2016年09月01日 09点09分
@sky甜丫头 就是没有这样的warning提示,所以我才有疑问啊,明明可以不用一定写在头部的,为什么都那么说?
2016年09月01日 11点09分
level 14
头部没有写session_start(),为也可以使用session。
2016年09月01日 22点09分
13