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

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

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

【问题讨论】:

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

标签: php


【解决方案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 变量。对吗?
猜你喜欢
  • 2020-11-26
  • 1970-01-01
  • 1970-01-01
  • 2018-09-22
  • 2014-01-23
  • 2019-12-29
  • 2023-03-19
  • 2013-05-13
  • 2019-11-18
相关资源
最近更新 更多