希望ECSHOP注重体验和细节

2016-07-07 15:03 来源:www.chinab4c.com 作者:ecshop专家



以下是回复一篇晓天解决ECSHOP保存购物车数据的帖子。
8# 晓天


晓天同志,尽管你帮助了我不少,但是我也不得不批评你们两句,考虑得很是不周全。
1.8楼的方法只能是治标不治本,通过数据库来保存session_id,长期使用一个session_id,那加密session_id的目的何在,那么长的session_id都能从cookie中找到,这出于什么安全目的呢?那要这个session_id何用,直接用布尔值岂不更简单,我只能说2.7以来的SESSION会话机制是有问题的,ECSHOP也是从康盛出来的,为什么不借鉴一下DISCUZ的SESSION机制呢,理论上和DISCUZ用的同一种处理反方式,稳定性却大打折扣。
2.更新用户登录SESSION_ID,会员入口处理了,注册登录页处理了,为什么就没有考虑到AJAX登录呢?解决办法如下(给各位朋友看的)
在user.php的elseif ($action == 'signin')这个逻辑末加上如下代码(这并不算好办法)。
  1. $sql = "select session_id from " .
  2. $GLOBALS['ecs']->table('users') . " where `user_id` ='" .
  3. $_SESSION['user_id'] . "'";
  4. if($db->getOne($sql))
  5. {

  6. if($db->getOne("select count(rec_id) from " .
  7. $GLOBALS['ecs']->table('cart') . " where `session_id`
  8. ='".SESS_ID."'"))
  9. {
  10. $db->query("UPDATE " .
  11. $GLOBALS['ecs']->table('users') . "SET `session_id` ='". SESS_ID . "
  12. 'where `user_id` ='".$_SESSION['user_id']."'");
  13. }
  14. }

  15. else
  16. {
  17. $db->query("UPDATE " .
  18. $GLOBALS['ecs']->table('users') . "SET `session_id` ='". SESS_ID. "'
  19. where `user_id` ='".$_SESSION['user_id']."'");
  20. }
复制代码
3.希望尽量少声明变量,例如:
$usersession_id=$db->getOne($sql);
if($usersession_id)
为什么不直接,
if($db->getOne($sql))
尽管PHP处理速度很快,语法习惯,我就不多说了。
4.整套的购物车数据保存体制,势在必行,为什么不好好的整理一下再发布。就此贴来讲,我不知道是不是可以被称作补丁,如果是那么漏洞是很多的,会员即便可以保存了,那匿名会员呢?匿名会员又如何处理呢?不保存么?保存了购物车压力又如何调剂呢?

5.就2.72以及之前版本发布了众多功能,但是我认为起码还有很多功能是还没有调整到位的,例如,SESSION体制,明明只有几个人访问,却能给你生成几十条SESSION记录甚至更多,而且众多的IP和客户端都是一样的;同一个会员用三种不同的浏览器就能生成三条激进相同的SESSION,而且购物车里的东西还不一样。。。。。这是为什么?当然这些问题都是我处理过的,比如,针对会员我是不会认同SESSION_ID的,转而认同USER_ID。

6.我们来看看如下代码,因为我确实不明白晓天的用意。
  1. $sql="select session_id from ".$GLOBALS['ecs']->table('users')." where `user_id` ='".$_SESSION['user_id']."'";

  2. $usersession_id=$db->getOne($sql);
  3. if($usersession_id)
  4. {
  5. $sql="select count(rec_id) from ".$GLOBALS['ecs']->table('cart')." where `session_id` ='".SESS_ID."'";
  6. $users_rec_id=$db->getOne($sql);
  7. if($users_rec_id>0)
  8. {
  9. $sql = "UPDATE " . $GLOBALS['ecs']->table('users') . "SET `session_id` ='". SESS_ID. " 'where `user_id` ='".$_SESSION['user_id']."'";
  10. $db->query($sql);
  11. }
  12. }
  13. else
  14. {
  15. $sql = "UPDATE " . $GLOBALS['ecs']->table('users') . "SET `session_id` ='". SESS_ID. "' where `user_id` ='".$_SESSION['user_id']."'";

  16. }
复制代码


尤其是最后一个else,这是什么意思?把一个sql赋给一个变量,完了不用执行还是给下面的逻辑来执行?反复判断并执行同一条语句,那你判断的意图是什么?我觉得上述代码直接用一句话就完成了,不知道是否可行。
  1. $db->query("UPDATE " . $GLOBALS['ecs']->table('users') . "SET `session_id` ='". SESS_ID. "' where `user_id` ='".$_SESSION['user_id']."'");
复制代码


非常感谢晓天管理员前期帮助我结识ECSHOP,谢谢!

希望ECSHOP重现辉煌。

老实说我认为ECSHOP在商派的带领下,大不如从前康盛那么积极。

题外话:高春辉为何不另立旗帜!ECSHOP为什么这么多人追随,因为真的开源,众人之力下,它的进步令人可怕!

回答:
这个东西不是一两句话能说的清楚的

2# netaxcess


不是一两句话能说清楚的,但是你一句话都没说啊,兄台,你是众多ECSHOP追随者的希望!

讨论这个话题是无意义的.
EC的发展,是被他的性质所决定的
不是被某个人,某个领袖.就能决定的。

兄弟.看开i点...
ecshop在我看来..仅仅只是一个过渡期..

楼主,好象你对session和cookie的机制理解得不是很透彻的,有些地方还是有误区

多伦也无益~

7# ecshopkaifa


关于SESSION会话和COOKIE的作用不是我理解有问题,ECSHOP采用数据库和服务器共存的SESSION体制无疑在理论上是很优秀的,但是目前我认为处理的还不算好,起码不算稳定,你试过SESSION在SESSION表里超过20000条SESSION记录么?当时我仔细检查发现在线人数不过200人而已,里面的重复性大得难以想象!我数据库和服务器压力也可想而知。。。。。