Php 为什么需要会话uuDestroy()?

Php 为什么需要会话uuDestroy()?,php,session,session-cookies,Php,Session,Session Cookies,session\u destroy()函数做什么?要删除全局数组$\u session中的所有会话变量,我必须使用session\u unset()。要从客户端浏览器中删除会话(删除会话id和名称),我必须取消设置Cookie: unset($_COOKIES[session_id()]); unset($_COOKIES[session_name()]); 为什么需要session\u destroy()函数?结束整个会话,这意味着它将从PHP的会话存储中删除,并且不能再次使用。如果只取消设

session\u destroy()
函数做什么?要删除全局数组$\u session中的所有会话变量,我必须使用
session\u unset()
。要从客户端浏览器中删除会话(删除会话id和名称),我必须取消设置Cookie:

unset($_COOKIES[session_id()]);
unset($_COOKIES[session_name()]);
为什么需要
session\u destroy()
函数?

结束整个会话,这意味着它将从PHP的会话存储中删除,并且不能再次使用。如果只取消设置会话变量和cookie,则会话仍然是活动的服务器端,并且如果再次设置某些会话变量,并且将具有原始会话ID的cookie再次发送到客户端,则会话可能会被回收

换句话说:会话基本上由存储在web服务器某处的秘密ID以及注册到该会话的会话变量组成。会话ID被发送到客户端(通常作为cookie),以便在以后的请求中可以将客户端标识为会话的“所有者”。假设已经创建了一个会话并注册了变量,下面是函数功能的概述:

  • session\u start()
    将属于客户端从会话注册表发送到
    $\u会话
    数组的会话ID的所有会话变量导入
  • session\u unset()
    或在
    $\u session
    变量上调用
    unset()
    将清除注册到当前会话的所有变量,但不会清除会话本身
  • 取消设置客户端的会话cookie将向客户端发出会话结束的信号,但这也不会从服务器上的会话注册表中删除会话
  • session\u destroy()
    是从会话注册表中实际清除会话的唯一函数,因此字面上是“销毁”会话
虽然
session\u destroy()
将注销所有会话变量,但它不会清除当前正在执行的脚本中的
$\u session
数组,因此最好取消设置会话变量以防止出现错误和安全问题

另一方面,PHP手册建议不要使用,而是从
$\u会话
中取消设置键:

如果使用了
$\u SESSION
(或
$HTTP\u SESSION\u VARS
用于PHP4.0.6或更低版本),请使用
unset()
取消注册会话变量,即
unset($\u SESSION['varname')


非常感谢,我已经读了好几遍了,但不明白它的作用。为什么它不会真正破坏会话。要销毁会话,我必须再使用两个步骤。但实际上session_destroy()应该为我完成这些步骤。若另一个代码的答案为您提供了所需的信息(我看不出它怎么做不到),您会接受它吗?这里通常就是这样做的:p
仅对不使用$\u会话的旧的不推荐代码使用session\u unset()。
要释放所有会话变量,请使用:
$\u session=array()