在 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 中取消设置会话变量时遇到问题的主要内容,如果未能解决你的问题,请参考以下文章