2013-10-11 2 views
0

Iam пытается удалить элемент из массива сеансов в Yii, используя следующий код.
Непрямая модификация перегруженного элемента CHttpSession не влияет

$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, используя два разных действия контроллера для вставки в массив сеансов и удаления элемента из массива сеансов.
Чтобы вставить 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); 

вставки работает хорошо, но удаление не работает.

ответ

2

Try:

$ вары = & $ сессии [ 'the_variable'];
...
переменные не установлены ($ варов [$ я])
...

$ сессии объект, а не массив. $session['the_variable'] перегрузка $session->get('the_variable') (http://www.yiiframework.com/doc/api/1.1/CHttpSession#get-detail)

Или, может быть, вам нужно получить массив из сессии, изменить его и пересохраните ...

1
$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; 

Сейчас он работает хорошо .. Спасибо за ответ .. :)

0

вы не можете отключенный многомерный сеанс массива по незадано, как это, я не знаю, почему, но попробовать это (я упростил код):

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

Легкий материал:

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

Yii имеет встроенный механизм, чтобы справиться с этим чисто. Соблюдайте правила и соблюдайте правила:

Yii::app()->session->remove('the_variable'); 
or 
$session = Yii::app()->session; 
$session->remove('the_variable'); 
Смежные вопросы