Yii - 操作会话变量

时间:2013-08-29 19:07:07

标签: php arrays session yii unset

在使用YII时,我仍然是一个新手,但过去几天我一直在使用会话变量,而我似乎无法理解我的错误背后的概念。任何建议将不胜感激。

到目前为止,我的添加功能完美无缺,因为我目前的目的是跟踪添加到会话变量营养的最后3个变量。

public function addSessionFavourite($pageId)
{
    $page = Page::model()->findByPk($pageId);
    $categoryName = $page->getCategoryNames();

    if($categoryName[0] == 'Nutrition')
    {
        if(!isset(Yii::app()->session['nutrition']))
        {
            Yii::app()->session['nutrition'] = array();
        }
        $nutrition = Yii::app()->session['nutrition'];
        array_unshift($nutrition, $pageId);
        array_splice($nutrition, 3);
        Yii::app()->session['nutrition'] = $nutrition;
    }

我的删除功能似乎根本不起作用,无论我尝试用它做什么。我将会话数组转移到临时数组的原因是试图绕过“如果一个全局化变量未设置()在函数内部,只破坏局部变量。调用环境中的变量将保留调用unset()之前的值相同。“但这完全失败了。

public function removeSessionFavourite($pageId)
{
    $page = Page::model()->findByPk($pageId);
    $categoryName = $page->getCategoryNames();

    if($categoryName[0] == 'Nutrition')
    {
        if(!isset(Yii::app()->session['nutrition']))
        {
            return true;
        }
        $nutritionArray = Yii::app()->session['nutrition'];
        unset($nutritionArray[$pageId]);
        Yii::app()->session['nutrition'] = $nutritionArray;
    }

任何建议或向正确的方向努力都将受到赞赏。

1 个答案:

答案 0 :(得分:2)

我个人从未使用Yii::app()->session我通常使用Yii用户,我从来没有遇到任何问题:

Yii::app()->user->setState('test', array('a'=>1,'b'=>2));
print_r(Yii::app()->user->getState('test')); //see whole array

$test = Yii::app()->user->getState('test');
unset($test['b']);
Yii::app()->user->setState('test',$test);
print_r(Yii::app()->user->getState('test')); //only 'a'=>1 remains

Yii::app()->user->setState('test', null);
print_r(Yii::app()->user->getState('test')); //now a null value

正如我在上面的评论中所述,多维数组似乎存在会话变量的问题:https://code.google.com/p/yii/issues/detail?id=1681