session_destroy()
函数有什么作用?要删除全局数组$ _SESSION中的所有会话变量,我必须使用session_unset()
。要从客户端浏览器中删除会话(删除会话ID和名称),我必须取消设置cookie:
unset($_COOKIES[session_id()]);
unset($_COOKIES[session_name()]);
为什么需要session_destroy()
功能?
答案 0 :(得分:11)
session_destroy()
结束整个会话,这意味着它将从PHP的会话存储中删除,不能再次使用。如果您只取消设置会话变量和cookie,则会话仍然是活动服务器端,如果再次设置某些会话变量并且具有原始会话ID的cookie再次发送到客户端,则可能会被回收。
以另一种方式表达:会话基本上由存储在Web服务器某处的秘密ID以及注册到该会话的会话变量组成。会话ID被发送到客户端(通常作为cookie),因此客户端可以在以后的请求中被识别为会话的“所有者”。假设已经创建了一个会话并且已经注册了变量,这里概述了这些函数的作用:
session_start()
导入属于客户端从会话注册表发送到$_SESSION
数组的会话ID的所有会话变量session_unset()
或在unset()
变量上调用$_SESSION
将清除当前会话中注册的所有变量,但 清除会话本身session_destroy()
是实际从会话注册表中清除会话的唯一函数,因此字面上“破坏”会话虽然session_destroy()
将取消注册所有会话变量,但它不会清除当前正在执行的脚本中的$_SESSION
数组,因此取消设置会话变量以防止错误和安全性仍然是个好主意的问题。
在相关的说明中,PHP手册建议不要使用session_unset()
,而是取消设置$_SESSION
的密钥:
如果使用
$_SESSION
(或{4.0}或更低版本的$HTTP_SESSION_VARS
),请使用unset()
取消注册会话变量,即unset($_SESSION['varname']);
。