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

时间:2017-07-13 09:15:34

标签: php session

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

返回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。

修改

会话变量previous设置如下

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

正在调用该函数

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

2 个答案:

答案 0 :(得分:1)

这取决于$_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 Assignment Operators

答案 1 :(得分:1)

我刚用原始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) }