在PHP中session_unset()和session_destroy()有什么区别?
从php.net文档:
session_destroy – 销毁注册到会话的所有数据
session_unset – 释放所有会话variables
我的三个问题是:
这两个function看起来非常相似。
两者之间的区别究竟是什么?
两者都似乎删除注册到会话的所有variables。 他们中的任何一个实际上是否会破坏会议? 如果不是,你怎么做到这一点(摧毁会议本身)。
这两个函数都不会在客户端删除会话cookie是否正确?
session_unset
只是清除$_SESSION
variables。 这相当于:
$_SESSION = array();
所以这只会影响本地的$_SESSION
variables实例,而不会影响会话存储中的会话数据。
与此相反, 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()
将清除$_SESSION
variables(如array()
),但不会触及会话文件。 但是,当脚本结束时, $_SESSION
的状态将被写入文件。 然后它将清除文件,但不会删除它。 当你使用session_destroy()
它不会触及$_SESSION
( session_destroy()
var_dump($_SESSION)
之后使用var_dump($_SESSION)
),但会删除会话文件,所以当脚本退出时不会有文件写入$_SESSION
。
我认为session_destroy()和session_unset()应该同时使用,以确保会话数据肯定会被删除。