默认的ecshop购物车存在一个很大的弊端: 1、当我们不登录将商品加入购物车后,等登录后再看,发现购买车没有了先前加入的商品。 2、当我们在公司登录后将商品加入购物车,回到家后支付,购物车中的商品没有了。 为解决此问题,最终决定采用根据cookie来保存商品,而摒弃了根据IP来保存商品的方法。 原因是IP很多时候并不是固定的,当我们下班回到家,或者去咖啡厅等转换了上网地点时,这个时候IP也跟着变了, 如果是cookie,只要您的笔记本没变,信息就会依然保存着,显而易见,根据cookie保存商品信息远胜过根据IP。 功能概述: 1、未登录情况下,根据cookie唯一性,可以使购物车中的商品一直保存7天。 2、登录后,之前未登录时添加到购物车中的商品仍旧保存在购物车中,避免再次添加。 3、用户退出后,购物车依然保存7天。 4、用户再次登录时,购物车自动显示之前所添加的商品(包括未登录时添加到购物车的商品),并按日期排序。 5、购物车中的商品一般默认保存7天,这样避免了用户是大,购物车信息过量导致网站性能下降。 1,includes\cls_session.php 换IP时不影响购物车 找到 $this->_ip = real_ip(); 注释,换成下面代码 //购物车 by neo 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); } 继续找 setcookie($this->session_name, $this->session_id . $this->gen_session_key($this->session_id) 把 0 改成 time()+86400*10 setcookie($this->session_name, $this->session_id . $this->gen_session_key($this->session_id), time()+86400*30, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure);//购物车 by neo 设置session_id的cookie保存10天,购物车和session都是根据这个值来获取的,如果丢失会重新生成一个,购物车的东西自然就找不到了 继续找 function destroy_session() 把里面的 setcookie($this->session_name, $this->session_id, 1, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure); if (!empty($GLOBALS['ecs'])) { $this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id'"); } 都注释掉。这是退出登录的时候,删除cookie,删除购物车的 2,admin/privilege.php " WHERE session_id NOT " . db_create_in($valid_sess); 改成 " WHERE add_time < ".($time-86400*30)." AND session_id NOT " . db_create_in($valid_sess); 管理员登陆时不清空购物车。 3,includes\lib_main.php 找到 function update_user_info() 在函数最里面加入 //购物车 by neo $sql = "update ".$GLOBALS['ecs']->table('cart')." set user_id =".$_SESSION['user_id']." where session_id = '".SESS_ID."'"; $GLOBALS['db'] -> query($sql); $sql1 = "update ".$GLOBALS['ecs']->table('cart')." set session_id ='".SESS_ID."' where user_id = '".$_SESSION['user_id']."'"; $GLOBALS['db'] -> query($sql1); $re = $GLOBALS['db'] -> getAll("select *,sum(goods_number) as goods_number from ".$GLOBALS['ecs']->table('cart')." where user_id = '{$_SESSION['user_id']}' and session_id = '".SESS_ID."' group by goods_id"); if($re) { foreach ($re as $k => $v) { $sql = "update ".$GLOBALS['ecs']->table('cart'). " set goods_number = ".$v['goods_number']." where rec_id = ".$v['rec_id']; $GLOBALS['db'] -> query($sql); $sql = "delete from ".$GLOBALS['ecs']->table('cart')." where rec_id <> {$v['rec_id']} and user_id = '{$_SESSION['user_id']}' and session_id = '".SESS_ID."' and goods_id = ".$v['goods_id']; $GLOBALS['db'] -> query($sql); } } 会员到别处登录,获取之前的购物车商品出来。 文章转载:http://www./ |
|