2012-03-02 98 views
5

session_destroy()函数做什么?要删除全局数组$ _SESSION中的所有会话变量,我必须使用session_unset()。要从客户端浏览器会话(删除会话ID和姓名),我不得不取消设置的cookie:为什么需要session_ destroy()?

unset($_COOKIES[session_id()]); 
unset($_COOKIES[session_name()]); 

为什么需要session_destroy()功能?

+0

http://us.php.net/manual/en/function.session-destroy.php – 2012-03-02 18:51:46

+0

非常感谢你,我读过几次,但无法理解它做什么。为什么它不会真正破坏会议。要销毁会话,我必须再使用两个步骤。但实际上,session_destroy()应该为我完成这些步骤。 – Green 2012-03-02 18:56:26

+2

如果*另一个代码*的答案为您提供了所需的信息(我看不出它是怎么回事),请您接受它?通常情况下,这是如何完成的:p – RobinJ 2012-03-04 10:49:42

回答

11

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

换句话说:会话基本上包含一个存储在Web服务器某处的秘密ID,以及注册到该会话的会话变量。会话ID被发送到客户端(通常作为cookie),以便客户端可以在以后的请求中被识别为会话的“拥有者”。假设会话已经建立并已注册到它的变量,这里是一个什么样的功能做一个概述:

  • session_start()进口属于该客户端从会话注册表发送到$_SESSION会话ID的所有会话变量阵列
  • session_unset()或致电unset()$_SESSION变量将清除注册到当前会话的所有变量,但它不会明确会议本身
  • 取消设置客户端的会话cookie将信号到CLI耳鼻喉科,本次会议已经结束,但服务器或者
  • session_destroy()这个不会从会话注册表中删除会话是将实际从会议注册表清除会话,从而从字面上“摧毁”了会议的唯一功能

虽然session_destroy()将注销所有会话变量,它不会清除,因此目前执行脚本的$_SESSION阵列,所以它仍然是取消设置会话变量,以防止bug和安全问题是一个好主意。

相关提示,PHP手册建议不要使用session_unset()而是从取消设置的$_SESSION键:

如果$_SESSION(或$HTTP_SESSION_VARS对于PHP 4.0.6或以下)时,使用unset()来取消注册会话变量,即unset($_SESSION['varname']);

+0

'仅对不使用$ _SESSION的旧版弃用代码使用session_unset()。' 要释放所有SESSION VARIABLES,请使用: '$ _SESSION = array()' – MTVS 2012-11-05 16:18:44