会话数据的目的是什么?

时间:2011-11-03 04:07:30

标签: php

我已经搜索了很多关于session_destroy的问题,并且答复者经常回复直接引用PHP manual引用以下内容:

  

session_destroy()会销毁与当前关联的所有数据   会话。它不会取消任何与之相关的全局变量   会话,或取消设置会话cookie。要使用会话变量   再一次,必须调用session_start()。

     

为了完全杀死会话,喜欢将用户注销掉,   会话ID也必须取消设置。如果使用cookie来传播   会话ID(默认行为),然后会话cookie必须是   删除。 setcookie()可以用于此。

在一个问“What is the difference between session_unset() and session_destroy() in PHP?”的问题中,回答者提到了$_SESSION变量和会话存储,但从未深入过去。

我认为函数session_destroy引起的许多混淆是由于对会话数据缺乏了解并将其与$_SESSION变量混合在一起。如果$_SESSION变量已包含该数据,我想知道会话数据的实际用途是什么?

感谢。

1 个答案:

答案 0 :(得分:1)

简化回答:

$_SESSION的目的是存储您(作为Web应用程序开发人员)希望跨页面加载保留的数据。因此,您可以在登录脚本中设置标记,例如logged_in,以检查用户是否已登录,并在任何其他页面上检查$_SESSION['logged_in'] == true,而不是查询该信息。

您的OP似乎假设数据在$_SESSION中自动存在。您作为开发人员确定了$_SESSION中的内容,但不是为您完成的。

希望这有帮助。

编辑:我明白了。存储在session.save_path的文件中的数据是PHP将您存储的信息保存到$_SESSION数组中的位置。这就是PHP可以跨页面加载重新加载$_SESSION数据的方式。因此,当脚本开始执行并调用session_start时,PHP会从session.save_path的文件中提取相应的数据并将其加载到$_SESSION

在页面执行开始时,session.save_path$_SESSION中的数据完全相同。但是,该脚本可能会添加或删除$_SESSION中的数据,最终会导致session.save_path处的文件更新,以便反映对$_SESSION所做的更改。