搜索
系统检测到您的用户名不符合规范:

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

浏览:631 发布日期:2019年03月04日 分类:技术分享 关键字: ECSHOP 购物车商品
默认的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);
}
继续找



继续找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);
}
}
会员到别处登录,获取之前的购物车商品出来。
最佳答案
评论() 相关
后面还有条评论,
评论支持使用[code][/code]标签添加代码
您需要登录后才可以评论 登录 | 立即注册
收藏
zhangleiphp
积分:1591 等级:LV3
热点推荐
(追記) (追記ここまで)
最新更新

我们

合作

网站

信息

ThinkPHP 是一个免费开源的,快速、简单的面向对象的 轻量级PHP开发框架 ,创立于2006年初,遵循Apache2开源协议发布,是为了敏捷WEB应用开发和简化企业应用开发而诞生的。ThinkPHP从诞生以来一直秉承简洁实用的设计原则,在保持出色的性能和至简的代码的同时,也注重易用性。并且拥有众多的原创功能和特性,在社区团队的积极参与下,在易用性、扩展性和性能方面不断优化和改进,已经成长为国内最领先和最具影响力的WEB应用开发框架,众多的典型案例确保可以稳定用于商业以及门户级的开发。

AltStyle によって変換されたページ (->オリジナル) /