间接修改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->get('the_variable')
(http://www.yiiframework.com/doc/api/1.1/CHttpSession#get-detail)
或者,也许,您需要从会话中获取数组,更改它并重新保存...
【讨论】:
以上是关于间接修改CHttpSession的重载元素没有效果的主要内容,如果未能解决你的问题,请参考以下文章