为什么我在使用setcookie
之前需要session_start()
而无需任何准备就可以使用$_SESSION
?我认为他们所做的工作是相似的。
答案 0 :(得分:11)
因为setcookie() 定义了要与其他HTTP标头一起发送的Cookie 。这与session_start()所做的完全不同,例如根据通过GET或POST请求传递的会话标识符创建会话或恢复当前会话,或通过cookie传递。
第一个只是向标题添加内容并将其发送到浏览器,而另一个从 $ _COOKIEs或$ _GET或$ _POST获取会话ID 然后尝试在session_save_path中查找会话文件,并在发现将其值反序列化为$ _SESSION时,如果没有,则创建一个新会话,可能在此过程中使用setcookie
来设置会话ID。
请参阅chapter on Sessions in the PHP Manual.
<子>
编辑与@Felix正确指出如下,会话不一定保存在文件中。但这并不重要,因为参数保持不变:session_start
将查找并(重新)初始化会话数据,而setcookie
只是执行名称所暗示的内容。
子>
答案 1 :(得分:1)
有关解释,请参阅我之前的回复。 如果您只是不想调用start_session()函数,请查看php.ini中的此设置: session.auto_start
答案 2 :(得分:1)
会话数据不一定存储在文件中,正如戈登所说。使用session_set_save_handler()
,您可以定义自己应该存储值的后端,例如在数据库中。
所有这些数据检索都使用session_start()
处理。这样,您可以在不破坏应用程序的情况下轻松更改后端。
注意:这只是session_start()
的一个原因,而且它只比设置Cookie更多。
答案 3 :(得分:0)
会话数据不一定存储在文件中,正如戈登所说。使用session_set_save_handler()
,您可以定义自己应该存储值的后端,例如在数据库中。
所有这些数据检索都使用session_start()
处理。通过这种方式,您可以在不破坏应用程序的情况下轻松更改后端。
注意:这只是session_start()
的一个原因,而且它只比设置Cookie更多。