0

我正在尝试使用以下代码从 Yii 中的会话数组中删除一个元素。

$session = Yii::app()->session;
        $arraylen = count($session['the_variable']);
        for ($i = 0; $i < $arraylen; $i++)
        {
            if ($session['the_variable'][$i] == $providerId)
            {
                unset($session['the_variable'][$i]);
            }
        }

但它显示错误

间接修改CHttpSession的重载元素无效

我尝试使用array_splice($session['the_variable'],$i,$i-1); 而不是 unset 。然后它也显示相同的错误。有什么方法可以从会话数组中删除元素吗?我使用 2 个不同的控制器操作插入会话数组并从会话数组中删除元素。
使用代码插入 Iam

$session = Yii::app()->session;
        if (!isset($session['the_variable']) || count($session['the_variable']) == 0)
        {
            $session['the_variable'] = array($providerId);
        } else
        {
            $myarr = $session['the_variable'];
            $myarr[] = $providerId;
            $session['the_variable'] = $myarr;
        }
        array('session' => $session);

插入运行良好,但删除不起作用。

4

5 回答 5

2

尝试:

$vars = &$session['the_variable'];
...
未设置($vars[$i])
...

$session 是对象,而不是数组。$session['the_variable']是超载$session->get('the_variable')http://www.yiiframework.com/doc/api/1.1/CHttpSession#get-detail

或者,也许,您需要从会话中获取数组,更改它并重新保存......

于 2013-10-11T07:31:51.207 回答
2
    $session = Yii::app()->session;
    $vars = $session['the_variable'];
    $arraylen = count($vars);
    for ($i = 0; $i < $arraylen; $i++)
    {
        if ($vars[$i] == $providerId)
        {
            unset($vars[$i]);
        }
    }
    $vars = array_values($vars);
    $session['the_variable'] = $vars;

现在它运行良好.. 感谢您的回复.. :)

于 2013-10-11T11:50:50.317 回答
1

Yii 有一个内置的机制来干净地处理这个问题。遵守约定并遵循正确的做法:

Yii::app()->session->remove('the_variable');
or
$session = Yii::app()->session;
$session->remove('the_variable');
于 2014-04-25T12:03:01.000 回答
0

Easy stuff:

Yii::app()->session->remove('the_variable');
or
$session = Yii::app()->session;
$session->remove('the_variable');
于 2014-04-25T11:50:07.777 回答
0

你不能通过这样取消设置来取消设置多维数组会话,我不知道为什么,但试试这个(我也简化了你的代码):

        $session = Yii::app()->session;
        $key = array_search($providerId,$session['the_variable']);
        $session->remove($key);
于 2013-12-16T17:12:49.367 回答