为什么需要session_ destroy()?

Gre*_*een 5 php session session-cookies

session_destroy()功能有什么作用?要删除全局数组$ _SESSION中的所有会话变量,我必须使用session_unset().要从客户端浏览器中删除会话(删除会话ID和名称),我必须取消设置cookie:

unset($_COOKIES[session_id()]);
unset($_COOKIES[session_name()]);
Run Code Online (Sandbox Code Playgroud)

为什么session_destroy()需要功能?

Ano*_*ode 11

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

换句话说:会话基本上由存储在Web服务器某处的秘密ID以及注册到该会话的会话变量组成.会话ID被发送到客户端(通常作为cookie),因此客户端可以在以后的请求中被识别为会话的"所有者".假设已经创建了一个会话并且已经注册了变量,这里概述了这些函数的作用:

  • session_start()导入属于客户端从会话注册表发送到$_SESSION阵列的会话ID的所有会话变量
  • session_unset()或调用unset()$_SESSION变量将清除注册到当前会话的所有变量,但它不会清除会议本身
  • 取消设置客户端的会话cookie将向客户端发出会话已结束的信号,但这不会从服务器上的会话注册表中删除会话
  • session_destroy() 唯一的功能是从会话注册表中实际清除会话,从字面上"破坏"会话

虽然session_destroy()将取消注册所有会话变量,但它不会清除$_SESSION当前正在执行的脚本中的数组,因此取消设置会话变量以防止错误和安全问题仍然是个好主意.

在相关的说明中,PHP手册建议不要使用session_unset()而是取消设置键$_SESSION:

如果$_SESSION(或者$HTTP_SESSION_VARS对于PHP 4.0.6或更低版本)使用,则用于unset()取消注册会话变量,即unset($_SESSION['varname']);.