ecshop模板

ECSHOP购物车商品依据cookie长久保存商品二次开发教程

分类:ECSHOP二次开发 来源: https://www.ecshopjcw.com 时间:2015-02-22

默认的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时不影响购物车
将用户的IP存入Cookie,或者在生成SESSION时,不取IP。这步修改对动态IP用户无法使用购物车也同时解决。这里IP存入Cookie的有 效期是10天,也就是10后购物车依然被清空了。如果想保留更久或更短,可以把864000改为其它数字。一般来说购物车数据留10天已足够了,10天了 还未下单,基本上就不会下单了。而10后购物车清空,不会造成数据库压力。

找到


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


会员到别处登录,获取之前的购物车商品出来。


你可能还会喜欢

qq code back_top
温馨提示

确定取消
温馨提示

关闭
您尚未登录

用户登陆

立即注册
忘记密码?
ecshop
ecshop下载 ecshop模板 ecshop多用户 ecshop免费模板
ecshop二次开发手册
ecshop二次开发 ecshop模板教程 ecshop微信配置 ecshop安装教程
网站建设制作
网站源码下载 网站建设教程 网站SEO优化 网站制作软件
ecshop教程网
ecshop模板定制 常见问题 ecshop二次开发. 关于我们
服务咨询 ECSHOP模板修改 微信:php2029
ECSHOP二次开发 moban2000@qq.com

可信网站 诚信网站 实名验证网站 实名网站 360网站安全检测认证