首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PHP ($_SESSION[])、session_unset()和session_destroy()之间的差异

PHP ($_SESSION[])、session_unset()和session_destroy()之间的差异
EN

Stack Overflow用户
提问于 2015-04-17 05:22:20
回答 3查看 6.9K关注 0票数 2

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

我试过这段代码

代码语言:javascript
复制
<?php 
session_start();
$_SESSION['one'] = "Hello";
$_SESSION['two'] = "World";
$_SESSION['three'] = "Welcome to session";
var_dump($_SESSION);

印出来

代码语言:javascript
复制
array (size=3)
  'one' => string 'Hello' (length=5)
  'two' => string 'World' (length=5)
  'three' => string 'Welcome to session' (length=18)

然后,我取消了第一个会话。

代码语言:javascript
复制
unset($_SESSION['one']);
echo "Session one unset and only session two and three exist";
var_dump($_SESSION);

然后打印出来

代码语言:javascript
复制
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)

如果我毁了会议

代码语言:javascript
复制
session_destroy();
echo "Session Destroyed <br />";
var_dump($_SESSION);

但是什么都没有发生,我仍然可以将会话打印为

代码语言:javascript
复制
Session Destroyed 
array (size=2)
  'two' => string 'World' (length=5)
  'three' => string 'Welcome to session' (length=18)

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

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

如果我使用unset来代替session_destroy()代码

代码语言:javascript
复制
session_unset('two');
echo "Session two unset";
var_dump($_SESSION);

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

代码语言:javascript
复制
Session two unset
array (size=0)
  empty

而不是使用session_unset('two');,如果我使用session_unset();,那么它也会给出相同的结果。

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

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

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

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2015-04-17 05:57:53

很简单,

session_unset -释放所有会话变量,但会话id不会被销毁。

session_destroy -销毁注册到一个会话的所有数据,要调用这个函数,第一个会话应该注册。

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

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

谢谢阿米特

票数 4
EN

Stack Overflow用户

发布于 2015-04-17 05:35:57

使用session_destroy()后,会话cookie将被删除,会话不再存储在服务器上。$_SESSION中的值可能仍然可用,但它们不在下一个页面加载中。

根据PHP

代码语言:javascript
复制
void session_unset ( void )

session_unset()函数释放当前注册的所有会话变量,并且不接受任何参数。

unset($_SESSION['name']);将只删除名称数据。

票数 3
EN

Stack Overflow用户

发布于 2015-04-17 05:30:21

我猜它已经被销毁了,但是内存还没有释放,所以你还可以看看它。而unset则将其设置为空。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29690993

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档