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

从php.net文档:

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

session_unset – 释放所有会话variables

我的三个问题是:

这两个function看起来非常相似。
两者之间的区别究竟是什么?

两者都似乎删除注册到会话的所有variables。 他们中的任何一个实际上是否会破坏会议? 如果不是,你怎么做到这一点(摧毁会议本身)。

这两个函数都不会在客户端删除会话cookie是否正确?

session_unset只是清除$_SESSIONvariables。 这相当于:

 $_SESSION = array(); 

所以这只会影响本地的$_SESSIONvariables实例,而不会影响会话存储中的会话数据。

与此相反, session_destroy销毁会话存储器中存储的会话数据(例如文件系统中的会话文件)。

其他一切保持不变。

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

session_unset(); 只删除会话中的variables – 会话仍然存在。 只有数据被截断。

 session_unset(); 

只需清除所有会话variables的所有数据。

 session_destroy(); 

删除所有会话。


例如

 session_start(); session_destroy(); $a = "1234"; $_SESSION[a] = $a; 

$_SESSION[a]NULL

 session_start(); session_unset(); $a = "1234"; $_SESSION[a] = $a; 

$_SESSION[a]1234

所以,我会用:

 session_start(); session_destroy(); session_start(); $a = "1234"; $_SESSION[a] = $a; 

session_unset()将清除$_SESSIONvariables(如array() ),但不会触及会话文件。 但是,当脚本结束时, $_SESSION的状态将被写入文件。 然后它将清除文件,但不会删除它。 当你使用session_destroy()它不会触及$_SESSIONsession_destroy() var_dump($_SESSION)之后使用var_dump($_SESSION) ),但会删除会话文件,所以当脚本退出时不会有文件写入$_SESSION

我认为session_destroy()和session_unset()应该同时使用,以确保会话数据肯定会被删除。