ecshop微信商城
  官方微博: 騰訊  
首頁 > ECSHOP教程 > ECSHOP二次開發 > ECSHOP二次開發教程 > ECSHOP購物車商品根據cookie長久保存商品插件

ECSHOP購物車商品根據cookie長久保存商品插件

ECSHOP教程 / ecshop 教程網(www.kkesgv.icu) 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);  
		}
	}

會員到別處登錄,獲取之前的購物車商品出來。


轉載請注明:ECshop119模板屋-ECshop教程網(全國最專業的ECSHOP插件制作商-專業ECSHOP二次開發)

幫助目錄

在線反饋

加ECSHOP模板屋微信語音幫助。

ecshop微信群

與網友交流ECSHOP開發修改。

加入QQ群交流