会话未设置,还是 session_destroy? [复制]

Posted

技术标签:

【中文标题】会话未设置,还是 session_destroy? [复制]【英文标题】:Session unset, or session_destroy? [duplicate] 【发布时间】:2011-08-07 13:21:40 【问题描述】:

可能重复:What is the difference between session_unset() and session_destroy() in php?

什么是最好的安全性,如果会话未设置,下次必须访问而不是重新创建会话时加载时间会更好吗?

【问题讨论】:

你能澄清你的问题吗? 有session destroy和unset,有什么区别? 我不认为这是重复的。从接受的答案来看,我认为用户的意思是 unset() 而不是 session_unset() 【参考方案1】:

取消设置将销毁特定会话变量,而session_destroy() 将销毁该用户的所有会话数据。

这真的取决于你的应用程序,你应该使用哪一个。请记住以上几点。

unset($_SESSION['name']); // will delete just the name data

session_destroy(); // will delete ALL data associated with that user.

【讨论】:

感谢清除,会话销毁似乎更安全 :) 如果您的目标是销毁该用户的所有会话数据,是的。 是的,那样会更安全,就像在注销链接中一样。 我认为 OP 是在询问 session_unset 与 session_destroy 的区别。 unset 和 session_unset 是不同的功能。 对于读者:不要使用 unset($_SESSION) 取消设置整个 $_SESSION,因为这将禁用通过 $_SESSION 超全局注册会话变量。【参考方案2】:

需要注意的是,在调用session_destroy() 之后,$_SESSION 变量仍然设置在同一页面中,而使用unset($_SESSION)$_SESSION = array() 时情况并非如此。此外,unset($_SESSION) 可以消除 $_SESSION 超全局,因此请仅在销毁会话时执行此操作。

话虽如此,最好还是像the first example for session_destroy() 中的 PHP 文档那样做。

【讨论】:

知道为什么在调用 session_destroy() 之后仍然设置 $_SESSION 变量吗? @wkm, "session_destroy() 销毁与当前会话关联的所有数据。它不会取消设置与会话关联的任何全局变量,也不会取消设置会话 cookie。要使用会话再次变量,session_start() 必须被调用。" - php.net/manual/en/function.session-destroy.php @IstiaqueAhmed “数据”似乎模棱两可。会话变量包含“数据”。我想session_destroy() 破坏了该会话的会话文件的内容,或者破坏了整个文件。就我而言,它删除了我的数据库中该会话 ID 的行。因此,据我了解,$_SESSION 变量在请求开始时由来自那些“数据”源的值填充。那么$_SESSION可能会在执行过程中被修改。最后,当请求完成时,PHP 将“写入”到“数据”(文件/db)并清空$_SESSION 变量。对吗?

以上是关于会话未设置,还是 session_destroy? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

会话数据的用途是啥?

PHP session_destroy()警告会话对象销毁失败[重复]

关于 PHP 会话的几个问题

为啥不会/如何对 PHP 会话变量进行排序而不是取消设置

session_destroy() 没有让我退出

PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别