购物车问题
本文关键字:问题 购物车 | 更新日期: 2023-09-27 17:49:42
我在一个网站上实现了简单的购物车。我将购物车和项目保存在Session
对象中。在用户结帐(使用Paypal)后,我清除了购物车中的物品。这工作得很好,但我在以下场景中看到了一个问题:
假设用户向购物车中添加了一些商品,然后打开另一个浏览器并登录。他现在可以在两个浏览器中看到这些项目。现在,如果他在一个浏览器中签出,他仍然可以在其他窗口中看到购物车项目,因为两个浏览器都有单独的会话。
我应该采取什么方法来避免这种情况,或者必须忍受这种情况?
编辑:-张贴问题后,我正在考虑它。我将满足于这个简单的解决方案,每当用户去结账时,我将点击数据库来加载购物车,而不是会话。这样我就不会击中数据库显示购物车中的项目(在顶部),也不会有任何基于虚拟项目的结帐。
从您在会话中保存购物车项目的那一刻起,您有不同的会话,您有不同的购物车。
为了消除这种情况,您需要有一个公共位置用于保存购物车的所有会话,这是数据库上的一个表。这个常用的地方都是用用户id连接到用户,用用户cookie连接到用户。
您必须ajax化页面的购物车面板部分,并使用setTimeout()
定期刷新它。
可能比它值得更多的努力,但是-如果你做得对,在第二页再次点击'checkout'应该不会导致重复的交易,列表将刷新下一个页面加载。
编辑
我所说的"做得对"是指基于用户Id跟踪购物车项目,而不是仅仅是 Session对象。您的web应用程序基于HTTP协议,打开和关闭连接只是为了满足HTTP web请求。现在很正常的是,如果你打开另外两个浏览器,并在其中一个上签出,你仍然可以在另一个上看到相同的页面(信息)。我认为您应该做的是避免用户可以签出两次,或者处理是否有人试图签出一个空篮子(这是用户在第二个浏览器上点击签出的情况)。在这种情况下,你可以显示一条消息。如果你采用间隔刷新页面的解决方案,请记住如果用户打开并登录250个不同的会话会发生什么:你的web应用会被点击多少次?如果你按照我的建议去做,所有的用户会话都会得到一个错误页面,比如:basstek是空的。