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

时间:2010-11-29 11:33:09

标签: php session session-cookies

来自php.net文档:

  

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

     

session_unset - 免费提供所有会话变量

我的三个部分问题是:

这两个功能看起来非常相似 这两者之间究竟有什么区别?

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

这两个函数都没有删除客户端的会话cookie吗?

7 个答案:

答案 0 :(得分:132)

session_unset只需清除$_SESSION变量即可。这相当于:

$_SESSION = array();

因此,这只会影响本地$_SESSION变量实例,但不影响会话存储中的会话数据。

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

其他一切都保持不变。

答案 1 :(得分:16)

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

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

答案 2 :(得分:14)

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;

答案 3 :(得分:4)

session_unset()将清除$_SESSION变量(如array()中所示),但不会触及会话文件。但是当剧本结束时; $_SESSION的状态将写入文件。然后它将清除文件但不会删除它。当您使用session_destroy()时,它不会触及$_SESSION(在var_dump($_SESSION)之后使用session_destroy()),但会删除会话文件,因此当脚本退出时会赢得&#39 ; t是写入$_SESSION的状态的文件。

答案 4 :(得分:0)

session_destroy() will delete the session after moving the page and session_unset() will delete session when the code is run.

答案 5 :(得分:0)

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

添加了两个项目

folder1
 --app1
 --app2
 --app3
 --web.config

test1

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

test2

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

test3

> 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

分别注释掉其他人,分别测试1、2或3

答案 6 :(得分:-1)

我尝试使用session_unset($_SESSION['session_name'])认为它只会取消设置特定或个人/单个会话名称。但是使用session_unset($_SESSION['session_name'])只会取消设置所有会话名称。如果要取消设置单个会话名称,则使用的正确代码仅为unset($_SESSION['session_name'])