ECSHOP购物车暂无商品,解决购物车没有产品商品保存不了问题

2016-06-13 13:05 来源:www.chinab4c.com 作者:ecshop专家

这个只需要修改 includes/cls_session.php 就好了 1,找到 function cls_session(...) 在函数结尾出setcookie(...)的地方把 0 改成 time()+86400*30 ,session_id的cookie保存一个月,购物车和session都是根据这个值来获取的,如果丢失会重新生成一个,购物车的东西自然就找不到了 2,找到 function gen_session_key($session_id) 最后一句改成 return sprintf('x', crc32(ROOT_PATH . $ip . $session_id)); 2.7.3已经改过了,2.7.2的要改一下,我当初改这个是因为360chrome浏览器在两种模式切换的时候,HTTP_USER_AGENT会改变,没切换一次验证session_id就不能通过,要重新生成,登录,购物车什么的都失效了 另外,我把$ip也去掉了,因为动态ip的话,同一台电脑下次访问可能ip不一样了,验证也不能通过 3,找到 function destroy_session() 把下面这段代码去掉,这是退出登录的时候,删除cookie,删除购物车的         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'");         }          4,修改admin/privilege.php 不如如果你设置购物车保存一个月的话,每次登录后台还是会被清除掉 function clear_cart() {         $sql = "SELECT DISTINCT session_id " .             "FROM " . $GLOBALS['ecs']->table('cart') . " AS c, " .                 $GLOBALS['ecs']->table('sessi**') . " AS s " .             "WHERE c.session_id = s.sesskey ";     $valid_sess = $GLOBALS['db']->getCol($sql);     // 删除cart中无效的数据     $time = gmtime();     $sql = "DELETE FROM " . $GLOBALS['ecs']->table('cart') .             " WHERE add_time < ".($time-86400*30)." AND session_id NOT " . db_create_in($valid_sess);     $GLOBALS['db']->query($sql); } 这样的话应该就可以了 另外我在用的时候,偶尔发现数据库日志错误,插入session错误,生成的session_id重复了 可以做一个改进 找到 function gen_session_id(),整个改成下面的代码:     function gen_session_id()     {         do         {             $this->session_id = md5(uniqid(mt_rand(), true));             $rs = $this->insert_session();             if ($rs !== false)             {                 return $rs;             }             $error_no = $this->db->errno();             if ($error_no > 0 && $error_no != 1062)             {                 die($this->db->ErrorMsg());             }         }         while ($error_no == 1062);     }