ecshop微信商城
??官方微博: 腾讯 ?
首页 > ECSHOP教程 > ECSHOP二次开发 > ECSHOP二次开发教程 > ECSHOP购物车商品根据cookie长久保存商品插件

ECSHOP购物车商品根据cookie长久保存商品插件

ECSHOP教程 / ecshop 教程网(www.ecshop119.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?

管理员登陆时不清空购物车。

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

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


转载请注明:ECshop119亚博体育手机游戏送屋-ECshop教程网(全国最专业的ECSHOP插件制作商-专业ECSHOP二次开发)

帮助目录

在线反馈

加ECSHOP亚博体育手机游戏送屋微信语音帮助。

ecshop微信群

与网友交流ECSHOP开发修改。

加入QQ群交流