会话未设置,还是 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 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别