ecshop退出登录会清空加入购物车的bug优化最佳解决方案

ecshop退出登陆后,会清空加入购物车,大家都应该知道有这样的勉强算bug的问题。
网上类似的教程相当多,但都不太好,说句难听的,算是引新手入歧途!
总结网上方法如下:
1、修改init.php,把sess_id绑定ip的。老杨点评:各种紊乱不解释。
2、修改cls_session.php,让user_id不为0的加入购物车商品在退出时不删除,修改lib_main.php,将加入购物车中sess_id换成新的session_id。
老杨点评:算是到了点子上的改法,但是在不同设置或电脑浏览器访问时,会照成其它设备上的出问题!必须重新登录商城模板才能解决!在手机流行的年代,如果手机和pc同时登录,或两台电脑台时登录,你会崩溃的,登了这边,那边加入购物车就空了,除非重新登录!
3、其它的方法,各种坑,不再列举。
老杨的方法:
1、
找到(268行左右):
if (!empty($GLOBALS[ ecs ]))

 

     {

 

         $this- db- query( DELETE FROM . 

$GLOBALS[ ecs ]- table( cart ) . WHERE session_id = 

$this- session_id

 

     }

复制代码

替换为:
    if (!empty($GLOBALS[ ecs ])) 

    { 

     $this- db- query( DELETE FROM . $GLOBALS[ ecs ]- table( cart ) . WHERE session_id = $this- session_id AND user_id = 0 // 老杨ecshop 只清空匿名** 

    } 

复制代码

2、
    define( SESS_ID , $sess- get_session_id());

复制代码

    //判断是否存在user_id的session,避免高版本PHP报错 

    if(isset($_SESSION[ user_id ])){ 

     //如果存在会员登陆 

     if($_SESSION[ user_id ] 0){ 

         //取得对应user_id的session MD5码,后面加入 自定的自符串加密。 

         $user_session=md5($_SESSION[ user_id ].    // 内容可自行修改 

         //取得之前的session_id, 老杨ecshop 

         $old_session=$sess- get_session_id(); 

         //如果会员的session_id和原先的session_id不同(则为新登录情况),则将加入购物车内原session_id的商品,更新为会员下的商品! 

         if($user_session != $old_session){ 

            $sql= update .$GLOBALS[ ecs ]- table( cart ). set session_id= .$user_session. ,user_id= .$_SESSION[ user_id ]. where session_id= .$old_session.  

            $GLOBALS[ db ]- query($sql); 

         } 

         //定义新的会员唯一session_id  老杨ecshop 

         define( SESS_ID ,$user_session); 

     }else{ 

         //不会有会员,继续用原本的session_id 

         define( SESS_ID , $sess- get_session_id()); 

     } 

    }else{ 

     //不会有会员,继续用原本的session_id 

     define( SESS_ID , $sess- get_session_id()); 

    }  

相关阅读