使用会话时为什么需要session_start?

时间:2010-03-17 09:18:28

标签: php session

为什么我在使用setcookie之前需要session_start()而无需任何准备就可以使用$_SESSION?我认为他们所做的工作是相似的。

4 个答案:

答案 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更多。