ECSHOP程序的购物车会自动清空,而且有多个清空设置,防不胜防:1、当用户的IP变化后,购物车自动清空;2、当浏览器关闭后,购物车自动清空;3、当用户退出登陆后,购物车自动清空;4、管理员在后台登陆后,购物车自动清空。格东站长网
几乎可以说,不管是不是会员、不管有没有登陆,购物车的数据是不保留的,甚至管理员登陆后台都会把购物车清空一次,似乎ECSHOP对购物车有刻骨之仇,分分钟要把购物车的数据清理掉。这给会员的体验就很差。很多会员反映:花了一下午时间挑好商品,准备第二天再下单,结果第二天一看,购物车里什么也没有了。想保留会员的购物车,需要修改程序。网络上给出了很多种修改方案,但都不全面,购物车依然会被清空。只有把程序中所有清空代码都修改掉,才起作用。格东站长网
1、限制购物车仅登陆后使用,以免未登陆使用购物车后数据被清空。
flow.php找到
  
if ($_REQUEST[‘step’] == ‘add_to_cart’)格东站长网
{格东站长网
include_once(‘includes/cls_json.php’);
复制代码
格东站长网
在下面添加格东站长网
if ( empty($_SESSION[‘user_name’]))
  
{格东站长网
$json = new JSON;格东站长网
$result[‘error’]= "999";格东站长网
$result[‘message’] = "请先登录";
  
die($json->encode($result));格东站长网
}
复制代码
  2、不自动清空会员的购物车格东站长网
关闭浏览器时,用户信息会更新,购物车被清空。退出登陆更是清空。我们修改为只清空游客的购物车,会员的不清空。(网络上这一步有几个版本的代码,都搞得很复杂,说还要把lib.main.php里面加入多少代码来“更新购物车”,那是不需要的。因为购物车信息本来就已写入数据库了,此地只是阻止清空就行了。而且有些更新购物车的代码是错误的,真的添加上去后,购物车会出错,比如同一个商品有多个颜色时,只能买一种颜色。想买两个颜色就搞不成。所以不要画蛇添足去搞什么“更新购物车”)。
    includes/cls_session.php找到destroy_session()函数,把其中格东站长网
/* ECSHOP 自定义执行部分*/格东站长网
if (!empty($GLOBALS[‘ecs’]))格东站长网
{
$this->db->query(‘DELETE FROM ‘ . $GLOBALS[‘ecs’]->table(‘cart’) . " WHERE session_id = ‘$this->session_id’ ");
}
复制代码
格东站长网
替换为格东站长网
/* ECSHOP 自定义执行部分(不清空会员的购物车) */
 
 
if (!empty($GLOBALS[‘ecs’]))
 
{
 
$this->db->query(‘DELETE FROM ‘ . $GLOBALS[‘ecs’]->table(‘cart’) . " WHERE session_id = ‘$this->session_id’ AND user_id = ” ");
}
复制代码
格东站长网
格东站长网
3、换IP时不影响购物车格东站长网
将用户的IP存入Cookie,或者在生成SESSION时,不取IP。这步修改对动态IP用户无法使用购物车也同时解决。这里IP存入Cookie的有效期是10天,如果想保留更久或更短,可以把864000改为其它数字。一般来说IP保留Cookie为10天已足够了,相当于IP不再乱变动。
includes/cls_session.php把格东站长网
$this->_ip = real_ip();
复制代码

替换为
 
if(isset($_COOKIE[‘real_ipd’]) && !empty($_COOKIE[‘real_ipd’]))
  
{
$this->_ip = $_COOKIE[‘real_ipd’];格东站长网
}格东站长网
else格东站长网
{格东站长网
$this->_ip = real_ip();格东站长网
setcookie("real_ipd", $this->_ip, time()+864000, $this->session_cookie_path);
   
}
复制代码
格东站长网
4、管理员登陆时不清空购物车格东站长网
如果发现错了,一定要止步.