Php 会话变量存在奇怪的unset()问题

Php 会话变量存在奇怪的unset()问题,php,session,Php,Session,我有一个函数,它通过一个键获取会话变量,然后将其重新分配给一个变量。我取消设置会话变量并返回我设置的变量。由于某些原因,它正在返回“”。如果我移除未设置的,它就会工作 这将返回null if(isset($_SESSION[$key])) { $session_variable = $_SESSION[$key]; var_dump($session_variable); unset($_SESSION[$key]);

我有一个函数,它通过一个键获取会话变量,然后将其重新分配给一个变量。我取消设置会话变量并返回我设置的变量。由于某些原因,它正在返回“”。如果我移除未设置的,它就会工作

这将返回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\u

编辑

会话变量previous的设置如下

$_SESSION['action'] = ['message' => 'bla', 'status' => 'success'];
(new Request)->getFlashedSessionVar('action'); //For testing
函数的调用方式如下

$_SESSION['action'] = ['message' => 'bla', 'status' => 'success'];
(new Request)->getFlashedSessionVar('action'); //For testing

这取决于
$\u会话[$key]
实际上是什么。 根据PHP文档:
PHP中通常的赋值行为的一个例外是对象,在PHP5中通过引用赋值。可以通过克隆关键字显式复制对象。

这意味着您可以通过引用进行赋值,从而取消设置同一对象


请阅读此处:

这取决于
$\u会话[$key]
的实际情况。 根据PHP文档:
PHP中通常的赋值行为的一个例外是对象,在PHP5中通过引用赋值。可以通过克隆关键字显式复制对象。

这意味着您可以通过引用进行赋值,从而取消设置同一对象


请阅读这里:

我刚刚用原始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 '';
?>

我刚刚用原始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 '';
?>

奇怪的是,当添加unset时,两个var_转储都不会输出任何内容。即使var_dump出现在unset函数之前。$_SESSION[$key]是一个标准的赋值,例如$_SESSION['action']=[1,2]奇怪的是,添加unset时,两个var_转储都不输出任何内容。即使var_dump出现在unset函数之前。$_SESSION[$key]是一个标准的赋值。例如$_SESSION['action']=[1,2]您的代码运行良好,没有为我省略未设置的会话。您使用的是任何PHP框架还是纯本机PHP?我使用的是内部遗留自定义框架,但大部分是原始PHP。我搜索了另一个未设置的函数,但其中一个不存在,因此我知道它没有被覆盖。我也有错误,所以应该能够看到,如果有什么是错误的你的代码工作正常,没有省略未设置的会话为我。你使用任何PHP框架或只是原生PHP?我使用的是一个内部遗留自定义框架,但大部分是原始PHP。我搜索了另一个未设置的函数,但其中一个不存在,因此我知道它没有被覆盖。我也有错误,所以应该能够看到,如果有什么是错误的感谢,不知道是什么原因,然后。将不得不潜得更深。谢谢,汉克斯,我不知道是什么原因造成的。将不得不潜得更深。谢谢