在 Yii2 中取消设置会话变量时遇到问题

Posted

技术标签:

【中文标题】在 Yii2 中取消设置会话变量时遇到问题【英文标题】:Having trouble unsetting session variable in Yii2 【发布时间】:2015-10-22 02:53:25 【问题描述】:

我正在使用Yii2,我刚刚开始在其中使用sessions。我已经在 Yii 网站上为他们阅读了documentation。

我注意到的一件事是,如果不使用标准的超全局 $_SESSION,在会话中处理多维数组有点困难,因此我主要使用它。

但我遇到的一件事是取消设置会话变量。

例子:

if (!Yii::$app->session->isActive) 
    Yii::$app->session->open();


print_r($_SESSION['foo']);

if ($this->command == 'sample_action') 

    if (!isset($_SESSION['foo'][$this->some_id][$this->example_id])) 
        $_SESSION['foo'][$this->some_id][$this->example_id] = $this->example_id;
        $result = true;
    

 elseif ($this->command == 'sample_action_2') 

    if (isset($_SESSION['foo'][$this->some_id][$this->example_id])) 
        unset($_SESSION['foo'][$this->some_id][$this->example_id]);
        //$_SESSION['foo'][$this->some_id][$this->example_id] = ''; // This works
        $result = true;
               



print_r($_SESSION['foo']);

在它上面使用unset 根本不起作用,它仍然存在。但是,将其设置为空白值是可行的。

【问题讨论】:

【参考方案1】:

试试这个..

$session = Yii::$app->session;
$session->remove('foo');

可以帮助你..

【讨论】:

是的,我知道你可以做到这一点,但是如何删除 multi-dimensional 数组中的值?这只会删除整个$_SESSION['foo'] 试试foreach ($session as $name => $value) $session->remove('$value); 那也行不通; remove 只能在第一级移除。【参考方案2】:

终于找到了一个可行的解决方案,希望这对其他人有帮助:

$session = Yii::$app->session;

$foo = $session['foo'];

if ($this->command == 'sample_action') 
    $foo[$this->some_id][$this->example_id] = $this->example_id;
 elseif ($this->command == 'sample_action_2') 
    unset($foo[$this->some_id][$this->example_id]);


$session['foo'] = $foo;

【讨论】:

以上是关于在 Yii2 中取消设置会话变量时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章

函数调用后清除 yii2 中的 cookie

每当我重新加载页面时,仍会设置取消设置 PHP 会话变量 [重复]

为啥不会/如何对 PHP 会话变量进行排序而不是取消设置

会话不在 Lumen PHP 框架中持续存在

取消设置 php 会话变量

雪花、任务和会话变量问题