我已经了解到
session_unset()
删除所有会话变量,这意味着它只是清除$_SESSION
变量,它等同于:
$_SESSION = array();
这只会影响本地$_SESSION
变量实例。
session_destroy()
会破坏存储在会话存储中的会话数据。
我的问题如下:
$_SESSION
是否也会被破坏并变得无法访问?session_destroy()
之后也无法访问,那么当会话变量实例已被session_unset()
销毁时它实际销毁了什么?感谢。
答案 0 :(得分:1)
session_unset()不会破坏会话,session_unset应该用在单个会话变量上。
session_unset($_SESSION['user_id']);
会话是指$ _SESSION超级全局变量吗?
根据php文档,不要在全局变量[http://php.net/manual/en/function.session-unset.php][1]
上使用session_unset请勿使用unset($ _ SESSION)取消整个$ _SESSION 禁用通过$ _SESSION注册会话变量 超全局。
当调用session_destroy()时,超级全局变量$ _SESSION也会被破坏并变得无法访问吗?
不,它不会变得无法进入。在使用session_destroy()销毁会话后,您可以使用session_start()来创建新会话。
如果超级全局变量$ _SESSION即使在调用session_destroy()之后也不会变得无法访问,那么会话变量实例已经被session_unset()销毁时它实际上会破坏它吗?
调用session_unset应该用于删除单个会话变量,而不是销毁你的会话。使用session_unset后,会话仍处于活动状态,您可以从我的测试中看到:
<?php
// This prints "Active"
session_start();
$_SESSION['user_id'] = 1000;
session_unset($_SESSION['user_id']);
if(session_status()==2)
echo "Active \n";
要在php中销毁会话,我建议不要尝试使用session_unset。我这样做:
// hijack then destroy
$session_id = session_id();
session_id($session_id);
session_start();
session_destroy();
session_commit();
答案 1 :(得分:0)
启动会话时,会生成会话ID并将其另存为cookie。
session_destroy()
将删除$_SESSION
的数组,因此与session_unset()
相同,但此外它还会破坏会话ID。该cookie将被清除。
从这一点开始,您只能在使用$_SESSION
开始会话后再次访问session_start()
变量。