繁体   English   中英

会话变量的怪异unset()问题

[英]Weird unset() issue with session variable

我有一个函数,该函数通过键获取会话变量,然后将其重新分配给变量。 我取消设置会话变量,然后返回设置的变量。 由于某种原因,它返回“”。 如果我删除未设置的项目,则可以使用。

返回null

if(isset($_SESSION[$key])) {
            $session_variable = $_SESSION[$key];
            var_dump($session_variable);
            unset($_SESSION[$key]);
            var_dump($session_variable);
            return $session_variable;
        }
    return '';

当省略unset时,它将返回正确的输出

if(isset($_SESSION[$key])) {
            $session_variable = $_SESSION[$key];
            var_dump($session_variable);
//          unset($_SESSION[$key]);
            var_dump($session_variable);
            return $session_variable;
        }
        return '';

我不明白为什么unset会删除变量$ session_variable。

编辑

像这样设置session变量

$_SESSION['action'] = ['message' => 'bla', 'status' => 'success'];

该函数被这样调用

(new Request)->getFlashedSessionVar('action'); //For testing

这取决于$_SESSION[$key]实际含义。 根据PHP文档: An exception to the usual assignment by value behaviour within PHP occurs with objects, which are assigned by reference in PHP 5. Objects may be explicitly copied via the clone keyword.

这意味着您只能通过引用进行分配,因此最终会取消设置相同的对象。

请在这里阅读: PHP赋值运算符

我刚刚在原始PHP中测试了您的代码。 对我来说很好

<?php 
    session_start();
    $key = 'action';
    $_SESSION[$key] = [ 1 ,2] ;
    if(isset($_SESSION[$key])) {
            $session_variable = $_SESSION[$key];
            var_dump($session_variable);
            unset($_SESSION[$key]);
            var_dump($session_variable);
            return $session_variable;
        }
    return '';
?>

输出量

array(2) { [0]=> int(1) [1]=> int(2) } array(2) { [0]=> int(1) [1]=> int(2) }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM