我已经搜索了很多关于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
变量已包含该数据,我想知道会话数据的实际用途是什么?
感谢。
答案 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
所做的更改。