间接修改CHttpSession的重载元素没有效果

Posted

技术标签:

【中文标题】间接修改CHttpSession的重载元素没有效果【英文标题】:Indirect modification of overloaded element of CHttpSession has no effect 【发布时间】:2013-10-19 04:42:30 【问题描述】:

我正在尝试使用以下代码从 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);

插入工作正常,但删除不工作。

【问题讨论】:

【参考方案1】:

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

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

【讨论】:

【参考方案2】:

简单的东西:

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

【讨论】:

【参考方案3】:

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

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

【讨论】:

【参考方案4】:
    $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;

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

【讨论】:

【参考方案5】:

试试:

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

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

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

【讨论】:

以上是关于间接修改CHttpSession的重载元素没有效果的主要内容,如果未能解决你的问题,请参考以下文章

教义,编辑 ManyToMany - 重载属性的间接修改

错误异常:间接修改重载属性 laravel

JS笔记 类操作(通过修改元素的class属性来间接修改样式)

在c ++中重载间接运算符[重复]

在JAVA中能给方法参数赋默认值吗

slice的比较?