90

来自php.net文档:

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

session_unset — 释放所有会话变量

我的三部分问题是:

这两个函数看起来非常相似。
两者之间的真正区别是什么?

两者似乎都删除了注册到会话的所有变量。他们中的任何一个实际上会破坏会话本身吗?如果没有,你如何做到这一点(销毁会话本身)。

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

4

8 回答 8

148

session_unset只是清除$_SESSION变量。这相当于做:

$_SESSION = array();

所以这只会影响局部$_SESSION变量实例,而不影响会话存储中的会话数据。

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

其他一切都保持不变。

于 2010-11-30T10:20:37.803 回答
19

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

session_unset();仅从会话中删除变量 - 会话仍然存在。只有数据被截断。

于 2010-11-29T11:37:51.193 回答
16
session_unset();

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


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;
于 2011-07-01T01:49:31.463 回答
7

session_unset()将清除$_SESSION变量(如 中array()),但不会触及会话文件。但是当脚本结束时;的状态$_SESSION将被写入文件。然后它将清除文件但不会删除它。使用session_destroy()时不会碰$_SESSION(Use var_dump($_SESSION)after session_destroy()),但会删除会话文件,所以脚本退出时不会有文件写入$_SESSION.

于 2014-12-10T03:07:07.857 回答
1

我试图使用session_unset($_SESSION['session_name'])它只会取消设置特定或个人/单个会话名称。但是使用session_unset($_SESSION['session_name'])只会取消设置所有会话名称。仅unset($_SESSION['session_name'])当您想取消设置单个会话名称时才使用正确的代码。

于 2018-03-06T22:58:31.470 回答
0

session_destroy()移动页面 session_unset()后将删除会话,并在代码运行时删除会话。

于 2017-12-18T06:13:01.047 回答
0

session_start(); #它将在浏览器实时内存中创建一个虚拟数组(关联)

添加了两项

> $_SESSION['me'] = "Yadab";  
> $_SESSION['you'] = "Avi";
>
> print_r($_SESSION); #will give, array( "me"=>"Yadab", "you"=>"Avi" )

测试1

> unset($_SESSION['me']); #only 'me' variable is removed fully (index & value) 
> print_r($_SESSION); #now the array is Array("you"=>"Avi")

测试2

> session_destroy(); #will unset the values of all session variables, but indexes exists 
> print_r($_SESSION); #Output, Array("you"=>undefined)
> #but some browser can store the value in cookies

测试3

> session_unset(); #will unset all the main variables not only the values 
> print_r($_SESSION); #that means session array is now empty, like Array()

测试块 1、2 或 3 单独通过注释掉其他

于 2020-03-23T17:52:29.467 回答
-2

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

于 2015-05-02T13:14:53.027 回答