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、修改includes/cls_session.php 找到(268行左右):

if (!empty($GLOBALS[‘ecs‘]))

        {

            $this->db->query(‘DELETE FROM ‘ .
$GLOBALS[‘ecs‘]->table(‘cart‘) . " WHERE session_id =
‘$this->session_id‘ );

        }

替换为:

    if (!emptyempty($GLOBALS[‘ecs‘]))
    {
        $this->db->query(‘DELETE FROM ‘ . $GLOBALS[‘ecs‘]->table(‘cart‘) . " WHERE session_id = ‘$this->session_id‘ AND user_id = 0");//www.lyecs.com 只清空匿名**
    }  

2、找到includes/init.php

    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码,后面加入‘@lyecs.com‘自定义的自符串加密。
            $user_session=md5($_SESSION[‘user_id‘].‘@lyecs.com‘);   //‘@lyecs.com‘内容可自行修改
            //取得之前的session_id,www.lyecs.com
            $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
            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());
    }  

3、同理,mobile/includes/init.php也改下。第2条是重点,已全部注释

时间: 2024-08-03 13:42:35

ecshop退出登录会清空购物车的bug优化,最完美解决方法的相关文章

C# DataGridView控件清空数据完美解决方法

C# DataGridView控件绑定数据后清空数据在清除DataGridview的数据时: 1.DataSource为NULL(DataGridView.DataSource= null;)这样会将DataGridView的列也删掉. 2.用DataGridview.Rows.Clear();  提示“不能清除此列表”!!!!! 以上都不是想要的结果.想要满足保持原有的列,就是重新绑定之前的DataTable,然后清除DataTable中的数据,如下: DataTable  dt  =  (D

ecshop广告宽度值必须在1到1024之间的解决方法

ecshop加广告出现广告位的宽度值必须在1到1024之间的解决方法,这个问题是今天刚刚发现的,我就郁闷了,现在1024宽度的广告能做什么,你看看京东,天猫,很多都是大型的横幅广告,这点ecshop有待改善更新,本来这个东西就不该限制的. 好啦,现在交大家怎么改过来,让宽度不受限制. 如下图,ecshop宽度限制 解决办法如下: 一.打开 admin/ad_position.php这个文件,搜索1024,这里你会搜到两个地方 //在236行左右 if ($ad_width > 1024 || $

ie6,ie7,ie8 css bug汇总以及兼容解决方法

1:li边距“无故”增加 任何事情都是有原因的,li边距也不例外. 先描述一下具体状况:有些时候li边距会突然增 加很多,值也不固定(只在IE6/IE7有这种现象),让人摸不着头脑,仔细“研究”发现是由于其低级元素ul的padding引 起,padding的上下值对li有影响,左右无影 响.所以只好笨手笨脚地把padding去掉,换成margin.这是能解决问题,但往往不是我们想要的结果,或许 还会引起其他不必要的怪现象. 解决这个问题的方法,其实很简单,既然是有ul引 起的,就设置ul的显示形

关于mysql登录出现报错信息:ERROR 1045 (28000)的解决方法

登录mysql数据库出现报错信息ERROR 1045(28000)如下: [[email protected] ~]# mysql -uroot -p fanshine Enter password:  ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 分析:数据库存在空用户所致 解决: 停止mysql服务 [[email protected] ~]# service mysql

Windouws7 下提示您使用非管理权限登录,无法创建和修改系统DSN的解决方法

在使用LoadRunner的数据库参数化方法的时候一小部分童鞋经常会碰到"您使用非管理权限登录,无法创建和修改系统DSN"这样的提示.包括在小强性能测试培训班中也出现过.下面就说下解决方案,这个方案一般情况下都可以解决,如果还是解决不了就选择用户数据源进行创建. 开始----运行,输入:Control Userpasswords2 在弹出的"用户帐户"对话窗中 输入管理员密码  才可以修改 选择受限用户 的属性 选择 组成员 1.小强性能测试班,2016年11月6号

用户退出登陆后,token依旧有效的问题 及解决方法

问题: 用户登陆后 获取他的请求, 然后用户退出登陆. 按道理 会话应该没了,但是你用这个用户原来的token,居然还可以继续访问 https://segmentfault.com/q/1010000010043871/ 原文地址:https://www.cnblogs.com/kaibindirver/p/12417190.html

oracle登录时shared memory realm does not exist的解决方法

解决办法:1.用CMD进入命令行2.sqlplus /nolog 3.conn / as sysdba4.startup 然后用sqlplus进入命令

SqlServer sa 用户登录失败的解决方法

一.控制面板->服务->MS SQL SERVER->登录-->本地系统帐户-->重新启动MS SQL SERVER用windows验证登陆查询分析器-->执行 sp_password null,sa新密码,'sa' 二."无法连接到服务器,用户xxx登陆失败"该错误产生的原因是由于SQL Server使用了"仅 Windows"的身份验证方式,因此用户无法使用SQL Server的登录帐户(如 sa )进行连接.解决方法如下所示

SQL2008无法连接到.\SQLEXPRESS,用户'sa'登录失败(错误18456)图文解决方法

出现问题 : 标题: 连接到服务器------------------------------无法连接到 .\SQLEXPRESS.------------------------------其他信息:用户 'sa' 登录失败. (Microsoft SQL Server,错误: 18456)   解决方法:  1.打开数据库——用Windows身份登录数据库   02.登录名——双击sa(打开属性)  03.常规——设置密码——确定  04.状态——登录:启用——确定  05. 右击服务器名—