PHP中的session_unset()和session_destroy()有什么区别?

Joh*_*han 83 php session session-cookies

php.net文档:

session_destroy - 销毁注册到会话的所有数据

session_unset - 释放所有会话变量

我的三个部分问题是:

这两个功能看起来非常相似.
这两者之间究竟有什么区别?

两者似乎都删除了注册到会话的所有变量.它们中的任何一个实际上都会破坏会话本身吗 如果没有,你如何做到这一点(破坏会话本身).

这两个函数都没有删除客户端的会话cookie,这是正确的吗?

Gum*_*mbo 135

session_unset只是清除$_SESSION变量.它等同于:

$_SESSION = array();
Run Code Online (Sandbox Code Playgroud)

因此,这仅影响局部$_SESSION变量实例,但不影响会话存储中的会话数据.

与此相反,session_destroy破坏存储在会话存储器中的会话数据(例如,文件系统中的会话文件).

其他一切都保持不变.

  • @GoTo:该session_unset用于取消注册为会话变量的全局变量,因为它在PHP 4中很常见.截至今天使用该函数是不合时宜的,不是必需的.它仍然在PHP中的唯一原因可能是向后兼容性,没有别的.如果您编写新代码,则不应使用它.如果你在代码中找到它,你应该将它与对session_register()和其他PHP 4会话变量处理函数的调用一起删除,除非你明确地处理PHP 4代码. (4认同)
  • 仍然令人困惑:请在会话存储中描述`local $ _SESSION变量实例与会话数据.据我所知,像我这样的1000人并没有明白你的观点.谢谢 (3认同)

Xam*_*ael 17

session_destroy(); 正在删除整个会话.

session_unset();仅删除会话中的变量 - 会话仍然存在.仅截断数据.


SLy*_*Huy 14

session_unset();
Run Code Online (Sandbox Code Playgroud)

只需清除所有会话变量的所有数据.


session_destroy();
Run Code Online (Sandbox Code Playgroud)

删除所有会话.


示例:

session_start();
session_destroy();     
$a = "1234";
$_SESSION[a] = $a;
Run Code Online (Sandbox Code Playgroud)

$_SESSION[a]NULL.


session_start();
session_unset();     
$a = "1234";
$_SESSION[a] = $a;
Run Code Online (Sandbox Code Playgroud)

$_SESSION[a]1234.


所以,我会用:

session_start();
session_destroy();   
session_start();  
$a = "1234";
$_SESSION[a] = $a;
Run Code Online (Sandbox Code Playgroud)

  • 在你的中间例子中 - >`session_unset();`你没有做任何事情,因为你仍然可以使用`$ _SESSION ["a"]`的会话,那么它的用途是什么? (2认同)

kau*_*hik 5

session_unset()将清除$_SESSION变量(如中的array()),但不会触摸会话文件。但是当脚本结束时;的状态$_SESSION将被写入文件。然后它将清除文件,但不会删除它。当您使用session_destroy()它时,不会触摸$_SESSIONvar_dump($_SESSION)在之后使用session_destroy()),但是会删除会话文件,因此,在脚本退出时,将没有文件来写入的状态$_SESSION