【问题标题】:using set_userdata() in codeigniter replaces the previous session value在 codeigniter 中使用 set_userdata() 替换之前的会话值
【发布时间】:2017-01-24 07:00:34
【问题描述】:

我正在尝试将前一个会话值与当前会话值合并,但不幸的是,当我尝试合并这两个值时,最后一个会话被破坏了。

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

$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
        )

)

但我想像这样将新数组与以前的数组合并。

    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
        )
    [1] => Array
        (
            [style_id] => 309
            [wrap] => Array
                (
                    [275] => 275
                )

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

            [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
        )

)

不明白问题出在哪里。任何帮助将不胜感激。

【问题讨论】:

  • array_merge 正在工作,但您的存储会话再次只有 $covr_wrap_mil 这是什么问题,所以您必须将会话 $oldses 设置为在最后一行使用,而不是像这样的 $covr_wrap_mil $oldses=$this->会话->用户数据('sesse'); $oldses=array_merge($oldses,$covr_wrap_mil); $this->session->set_userdata('sesse', $oldses);
  • 感谢@JYoThI 的回复,你是对的。我使用 $this->session->set_userdata('sesse', $oldses);但它不起作用。
  • 您必须先将当前会话存储到一个数组中,然后才能为会话变量设置新值,然后将新会话值合并到之前的数组中。

标签: php arrays codeigniter session


【解决方案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;

【讨论】:

    【解决方案2】:

    你做得对。只换一行

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

    要将合并数组设置为会话,您必须存储 $oldses 的值而不是 $covr_wrap_mil

    【讨论】:

      【解决方案3】:

      使用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;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2018-03-11
        • 1970-01-01
        • 2012-03-04
        • 2023-03-30
        • 2014-03-03
        • 1970-01-01
        • 2017-08-07
        相关资源
        最近更新 更多