会话数据的用途是啥?

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,而实际上它包含无效数据。

以上是关于会话数据的用途是啥?的主要内容,如果未能解决你的问题,请参考以下文章

JMS 会话的目的是啥?

在客户端设置多个 PHP cookie 的实际用途是啥

会话重载 - PHP 会话中存储的“数据过多”是啥?

为啥我们需要开始会话,会话基本上是啥? [复制]

scope属性的用途是啥?

Oracle SQL 会话的生命周期是啥?