轻源码

  • QingYuanMa.com
  • 全球最大的互联网技术和资源下载平台
搜索
一起源码网 门户 ECShop网店 查看主题

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

发布者: gt2571 | 发布时间: 2019-2-27 09:31| 查看数: 4812| 评论数: 1|帖子模式

默认的购物车存在一个很大的弊端:
        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后购物车清空,不会造成数据库压力。
        找到
       
  1. $this->_ip = real_ip();
复制代码
        注释,换成下面代码
       
       
  1.                 //购物车 by neo
  2.                 if(isset($_COOKIE['real_ipd']) && !empty($_COOKIE['real_ipd']))
  3.                 {
  4.                         $this->_ip = $_COOKIE['real_ipd'];
  5.                 }
  6.                 else
  7.                 {
  8.                         $this->_ip = real_ip();
  9.                         setcookie("real_ipd", $this->_ip, time()+864000, $this->session_cookie_path);
  10.                 }
复制代码

        继续找
       
  1. setcookie($this->session_name, $this->session_id . $this->gen_session_key($this->session_id)
复制代码
把 0 改成 time()+86400*10
       
       
  1. 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都是根据这个值来获取的,如果丢失会重新生成一个,购物车的东西自然就找不到了
       
       
            继续找
       
  1. function destroy_session()
复制代码
  把里面的
       
       
  1. setcookie($this->session_name, $this->session_id, 1, $this->session_cookie_path, $this->session_cookie_domain, $this->session_cookie_secure);
复制代码
  1.         if (!empty($GLOBALS['ecs']))
  2.         {
  3.             $this->db->query('DELETE FROM ' . $GLOBALS['ecs']->table('cart') . " WHERE session_id = '$this->session_id'");
  4.         }
复制代码
   都注释掉。这是退出登录的时候,删除cookie,删除购物车的
       
        2,admin/privilege.php
       
  1. " WHERE session_id NOT " . db_create_in($valid_sess);
复制代码
         改成
       
       
  1. " WHERE add_time < ".($time-86400*30)." AND session_id NOT " . db_create_in($valid_sess);
复制代码
管理员登陆时不清空购物车。
       
        3,includes\lib_main.php
        找到
       
  1. function update_user_info()
复制代码
   在函数最里面加入
       
       
  1.                 //购物车 by neo
  2.                 if(isset($_COOKIE['real_ipd']) && !empty($_COOKIE['real_ipd']))
  3.                 {
  4.                         $this->_ip = $_COOKIE['real_ipd'];
  5.                 }
  6.                 else
  7.                 {
  8.                         $this->_ip = real_ip();
  9.                         setcookie("real_ipd", $this->_ip, time()+864000, $this->session_cookie_path);
  10.                 }0
复制代码

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

最新评论

A机智的下雨天 发表于 2022-7-18 18:17
游戏网页源码

轻源码让程序更轻更快

QingYuanMa.com

工作时间 周一至周六 8:00-17:30

侵权处理

客服QQ点击咨询

关注抖音号

定期抽VIP

Copyright © 2016-2021 https://www.171739.xyz/ 滇ICP备13200218号

快速回复 返回顶部 返回列表