PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 之间的区别

Ran*_*K R 4 php session

我需要有关 php 中的会话的帮助

我试过这段代码

<?php 
session_start();
$_SESSION['one'] = "Hello";
$_SESSION['two'] = "World";
$_SESSION['three'] = "Welcome to session";
var_dump($_SESSION);
Run Code Online (Sandbox Code Playgroud)

它打印

array (size=3)
  'one' => string 'Hello' (length=5)
  'two' => string 'World' (length=5)
  'three' => string 'Welcome to session' (length=18)
Run Code Online (Sandbox Code Playgroud)

然后我取消了会话一

unset($_SESSION['one']);
echo "Session one unset and only session two and three exist";
var_dump($_SESSION);
Run Code Online (Sandbox Code Playgroud)

它打印

Session one unset and only session two and three exist
array (size=2)
  'two' => string 'World' (length=5)
  'three' => string 'Welcome to session' (length=18)
Run Code Online (Sandbox Code Playgroud)

那么如果我销毁会话

session_destroy();
echo "Session Destroyed <br />";
var_dump($_SESSION);
Run Code Online (Sandbox Code Playgroud)

但没有任何反应,我仍然可以将会话打印为

Session Destroyed 
array (size=2)
  'two' => string 'World' (length=5)
  'three' => string 'Welcome to session' (length=18)
Run Code Online (Sandbox Code Playgroud)

但如果我session_destroy();再次使用它会给我一个警告

警告:session_destroy():尝试销毁未初始化的会话

session_destroy()如果我使用 unset而不是代码

session_unset('two');
echo "Session two unset";
var_dump($_SESSION);
Run Code Online (Sandbox Code Playgroud)

所有会话变量都未设置,我无法访问它打印的会话三个变量

Session two unset
array (size=0)
  empty
Run Code Online (Sandbox Code Playgroud)

而不是使用session_unset('two');if 我使用session_unset();then 我也给了我相同的结果。

unset($_SESSION['one'])那么、session_unset('one')session_unset()之间的实际区别是什么session_destroy().

session_destroy()我用谷歌搜索它,到处都得到了用于销毁整个会话的答案(但在上面的代码中我仍然可以访问会话变量)并且session_unset('one')用于仅取消设置单个会话变量(但是在上面的代码中如果我使用session_unset('one')所有会话变量都未设置)。

因此,请帮助我了解会话是如何工作的,以及在记录我们的用户时应使用哪些代码,session_unset()或者session_destroy()

小智 5

它非常简单,

\n\n

session_unset \xe2\x80\x94 释放所有会话变量,但会话 id 不会被销毁

\n\n

session_destroy \xe2\x80\x94 销毁注册到会话的所有数据,要调用此函数,首先应注册会话。

\n\n

unset($_SESSION['VARIABLE_NAME']) - 这将取消设置您传递的变量值。

\n\n

在您的示例中,直接调用session_destroy()是不正确的,因此您可以看到会话中存在的变量的值,您可以为注册的会话调用 session_destroy 。

\n\n

谢谢\n阿米特

\n