PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别
Posted
技术标签:
【中文标题】PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别【英文标题】:Difference between unset($_SESSION[]), session_unset() and session_destroy() in PHP 【发布时间】:2015-06-23 19:41:12 【问题描述】:我需要关于 php 会话的帮助
我试过这段代码
<?php
session_start();
$_SESSION['one'] = "Hello";
$_SESSION['two'] = "World";
$_SESSION['three'] = "Welcome to session";
var_dump($_SESSION);
打印出来
array (size=3)
'one' => string 'Hello' (length=5)
'two' => string 'World' (length=5)
'three' => string 'Welcome to session' (length=18)
然后我取消设置会话一
unset($_SESSION['one']);
echo "Session one unset and only session two and three exist";
var_dump($_SESSION);
它会打印出来
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)
如果我销毁会话
session_destroy();
echo "Session Destroyed <br />";
var_dump($_SESSION);
但是什么也没发生,我仍然可以将会话打印为
Session Destroyed
array (size=2)
'two' => string 'World' (length=5)
'three' => string 'Welcome to session' (length=18)
但如果我再次使用session_destroy();
,它会给我一个警告
警告:session_destroy(): 试图销毁未初始化的会话
如果我使用 unset 而不是 session_destroy()
代码
session_unset('two');
echo "Session two unset";
var_dump($_SESSION);
所有会话变量都未设置,我无法访问会话三个变量 它打印
Session two unset
array (size=0)
empty
如果我使用session_unset();
而不是使用session_unset('two');
,那么我也会得到相同的结果。
那么unset($_SESSION['one'])
、session_unset('one')
、session_unset()
和session_destroy().
之间的实际区别是什么
我用谷歌搜索了它,到处都得到了session_destroy()
用于销毁整个会话的答案(但在上面的代码中我仍然可以访问会话变量),session_unset('one')
用于仅取消设置单个会话变量(但在上面的代码中,如果我使用session_unset('one')
,所有会话变量都会被取消设置。
所以请帮助我了解会话的工作原理,以及在记录我们的用户时应该使用什么代码,session_unset()
或 session_destroy()
。
【问题讨论】:
格式化Q的标题,只用几句话就能准确理解问题! ***.com/help/how-to-ask Session unset, or session_destroy?的可能重复 【参考方案1】:我猜是销毁了但是内存还没有释放,所以你还是可以看看的。而 unset 将其设置为 null。
【讨论】:
【参考方案2】:使用session_destroy()
后,会话cookie被删除,会话不再存储在服务器上。 $_SESSION
中的值可能仍然可用,但它们不会在下一页加载时出现。
根据PHP
void session_unset ( void )
session_unset()
函数释放当前注册的所有会话变量,并且不带任何参数。
unset($_SESSION['name']);
将只删除姓名数据。
【讨论】:
你是对的,在session_destroy()
之后,会话变量中的值在下一页加载时不再可用。但是unset($_SESSION[])
和session_unset()
有什么区别
好的,这意味着我们应该只使用session_unset()
而不是 session_unset('one')。【参考方案3】:
其实很简单,
session_unset — 释放所有会话变量,但会话 id 不会被销毁
session_destroy — 销毁注册到会话的所有数据,调用此函数时应注册第一个会话。
unset($_SESSION['VARIABLE_NAME']) - 这将取消设置您传递的变量值。
在您的示例中,直接调用 session_destroy() 是不正确的,因此您可以看到会话中存在的变量值,您可以调用 session_destroy 注册会话。
谢谢 阿米特
【讨论】:
1.你能解释一下如何调用session_destroy()
2. 我们如何注册一个会话 3. session_unset()
和session_unset('VARIABLE_NAME')
是否具有相同的效果。因为在使用session_unset('VARIABLE_1')
后,我无法访问session_unset('VARIABLE_2')
4. 我应该在注销页面中使用哪个
1. session_destroy(),可以直接调用。 2. 可以调用 session_register() 函数注册一个会话。 3.没有 session_unset('VARIABLE_NAME') 将从会话中取消设置变量,并且 session_unset() 将从会话中删除所有变量。因此,在您的情况下,您应该使用 session_destroy,这将完全销毁所有会话变量和会话 ID,并将注销用户。以上是关于PHP 中 unset($_SESSION[])、session_unset() 和 session_destroy() 的区别的主要内容,如果未能解决你的问题,请参考以下文章
php unset array from 2d session array