在codeigniter中使用set_userdata()替换以前的会话值

时间:2017-01-24 07:00:35

标签: php arrays codeigniter session

我正在尝试将之前的会话值与当前会话值合并,但遗憾的是,当我尝试合并两个值时,最后一个会话都会被破坏。

这是我用于合并会话数组的代码。

height=100%

目前我正在使用此阵列

$sess=$this->session->userdata('sesse');
    $covr_wrap_mil=array();
                $covr_wrp=$this->session->userdata('bar');              
                $mil=array('miluna_products'=>$milunaid,'total_price'=>$totalprice);            
                $covr_wrap_mil[]=array_merge($covr_wrp,$mil);

                    if(isset($sess)  && !empty($sess)):

                        $oldses=$this->session->userdata('sesse');                      
                                $oldses=array_merge($oldses,$covr_wrap_mil);                            
                                $this->session->set_userdata('sesse',$covr_wrap_mil);

                    else:

                        $this->session->set_userdata('sesse',$covr_wrap_mil);   

                    endif;

但我想将新数组与之前的数组合并。

 Array
(
    [0] => Array
        (
            [style_id] => 308
            [wrap] => Array
                (
                    [285] => 285
                )

            [cover] => Array
                (
                    [307] => 307
                )

            [miluna_products] => a:2:{s:6:"322%14";s:30:"a:1:{i:0;s:12:"100_2102.jpg";}";s:7:"323%268";s:35:"a:1:{i:0;s:17:"1449004825736.gif";}";}
            [total_price] => 282
        )

)

不明白问题出在哪里。任何帮助都会受到高度赞赏。

3 个答案:

答案 0 :(得分:1)

您已合并数组但错过以使用合并数组设置会话数据

更改

  

在这里,您将使用$covr_wrap_mil数据覆盖会话          而不是合并的数组$oldses数据,因此它正在替换旧的会话数据

$oldses=$this->session->userdata('sesse');                               
$oldses=array_merge($oldses,$covr_wrap_mil);  
/* Here you are overwriting session with covr_wrap_mil data 
   instead of merged array data so it was replacing old session   
   data
*/                        
$this->session->set_userdata('sesse',$covr_wrap_mil);

$oldses=$this->session->userdata('sesse');                               
$oldses=array_merge($oldses,$covr_wrap_mil);                          
$this->session->set_userdata('sesse', $oldses);

最后看起来如下

 $sess=$this->session->userdata('sesse');

 $covr_wrap_mil=array();
 $covr_wrp=$this->session->userdata('bar');              
 $mil=array('miluna_products'=>$milunaid,'total_price'=>$totalprice);            
 $covr_wrap_mil[]=array_merge($covr_wrp,$mil);

 if(!empty($sess)):   
     $oldses=$sess;                      
     $oldses=array_merge($oldses,$covr_wrap_mil);                            
     $this->session->set_userdata('sesse',$oldses);   
 else:
     $this->session->set_userdata('sesse',$covr_wrap_mil);   
 endif;

答案 1 :(得分:0)

你做得对。只更改一行

 $oldses=$this->session->userdata('sesse');                      
 $oldses=array_merge($oldses,$covr_wrap_mil);                            
 $this->session->set_userdata('sesse',$oldses);

将mergred数组设置为session,你必须存储$ oldses的值而不是$ covr_wrap_mil

答案 2 :(得分:0)

使用array_push()代替array_merge()。在array_merge()密钥中使用较新的值进行更新,您丢失了之前的会话值

所以你的代码将是

$sess=$this->session->userdata('sesse');
$covr_wrap_mil=array();
            $covr_wrp=$this->session->userdata('bar');              
            $mil=array('miluna_products'=>$milunaid,'total_price'=>$totalprice);            
            $covr_wrap_mil[]=array_merge($covr_wrp,$mil);

                if(isset($sess)  && !empty($sess)):
                 $older_session=array(); //crate new array
                 $oldses=$this->session->userdata('sesse');                      
                 array_push($older_session,$oldses,$covr_wrap_mil);
               /*update session with $older_session*/                           
                 $this->session->set_userdata('sesse',$older_session);

                else:

                    $this->session->set_userdata('sesse',$covr_wrap_mil);   

                endif;