会话数据的用途是啥?
Posted
技术标签:
【中文标题】会话数据的用途是啥?【英文标题】:What is the purpose of Session Data?会话数据的用途是什么? 【发布时间】:2011-12-20 20:50:29 【问题描述】:我搜索了很多关于 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
变量已经包含该数据,我想知道会话数据的实际用途是什么?
谢谢。
【问题讨论】:
我确实等了一会儿,但除了 nickb 似乎没有人回答。如果出现任何问题,我仍然可以删除我的勾选并勾选一个更好的答案。你会试一试吗? 我对 nickb 的回答没有更好的答案。有人可能会避免阅读您的问题,因为它已经得到了回答。 也许,如果有人觉得我的问题一开始是建设性的,我会等待更长时间...... 【参考方案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
所做的更改。
【讨论】:
不,我问的是位于session.save_path
文件中的会话数据和全局$_SESSION
变量之间的区别。
哦,我现在明白了。我已经用我能记住的关于会话的内容更新了我的答案。希望对您有所帮助。
如果我销毁会话数据,为什么$_SESSION
不自行取消设置?
对此我不是 100% 确定,但是:当您销毁会话数据时,您是在告诉 PHP 删除 session.save_path
中的数据。但是,由于$_SESSION
是一个变量并且已经加载到页面上,它仍然包含(现在不正确的)会话数据。通过取消设置,脚本执行的其余部分将看到 $_SESSION
为空。
会,但是当您销毁会话时,脚本需要结束。如果脚本在您销毁会话后没有立即结束,那么您可能会尝试使用$_SESSION
,而实际上它包含无效数据。以上是关于会话数据的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章