间接修改CHttpSession的重载元素没有任何影响

时间:2013-10-11 07:21:19

标签: php session yii session-variables unset

尝试使用以下代码从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);而不是取消设置。然后它也显示相同的错误。是否有任何方法可以从会话数组中删除元素?.Iam使用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);

插入效果很好,但删除无效。

5 个答案:

答案 0 :(得分:2)

尝试:

  

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

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

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

答案 1 :(得分: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;

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

答案 2 :(得分:0)

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

        $session = Yii::app()->session;
        $key = array_search($providerId,$session['the_variable']);
        $session->remove($key);

答案 3 :(得分:0)

简单的事情:

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

答案 4 :(得分:0)

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

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