【问题标题】:Shopping Cart Problem购物车问题
【发布时间】:2011-08-01 12:00:15
【问题描述】:

我在一个网站上实现了简单的购物车。我将购物车和物品保存在 Session 对象中。用户结帐后(使用 Paypal),我清除购物车项目。这工作正常,但我在以下场景中看到了一个问题:

假设用户将一些商品添加到购物车并打开另一个浏览器并登录。他现在可以在两个浏览器中看到这些商品。现在,如果他在一个浏览器中签出,他仍然能够在另一个窗口中看到购物车项目,因为两个浏览器都有单独的会话。

我应该采取什么方法来避免这种情况,或者我必须忍受这种情况?

编辑:- 发布问题后,我正在考虑它。我会接受这个简单的解决方案,每当用户结账时,我都会点击数据库来加载购物车而不是会话。这样我就不会因为在购物车(顶部)中显示项目而访问数据库,也不会有任何基于幻像项目的结帐。

【问题讨论】:

    标签: c# asp.net shopping-cart


    【解决方案1】:

    从您在会话中保存购物车项目的那一刻起,您有不同的会话,您就有不同的购物车。

    要消除这种情况,您需要为所有要保存购物车的会话设置一个公共位置这是数据库中的一个表。这个常见的地方用用户 id 连接到用户 ether,用用户 cookie 连接到 ether。

    【讨论】:

    • 你的解决方案肯定会解决这个问题,但它真的是一个小网站,我现在不想一路实现共享会话等。我想到了另一个我要添加到我的选项问题。
    • @Aritus 这是一个很好的解决方案,但目前我将继续使用我在编辑问题中概述的方法。
    【解决方案2】:

    您必须对页面的购物车面板部分进行 AJAX 化,并使用 setTimeout() 定期刷新它。

    不过,可能付出的努力多于其价值 - 如果您做得对,在第二页再次单击“结帐”不应导致重复交易,并且列表将在下一页加载时刷新。

    编辑

    “做对了”我的意思是根据用户的 ID 跟踪购物车项目,而不是 只是 Session 对象。

    【讨论】:

    • 项目由他们自己的唯一ID +用户ID跟踪。但问题是我将项目 x 添加到购物车并结帐,然后我再次添加项目 x 并结帐。没有办法知道它是同一个项目还是新项目:(
    • 在那种情况下,您确实确​​实想要结帐两次,因为您分别添加了两个相同的项目?一旦一个项目被签出,它将与某种交易/订单 ID 相关联(我假设?),所以你可以说它们是两个独立的实体,而不是 1 个正品,1 个骗子?
    【解决方案3】:

    您的 Web 应用程序基于 HTTP 协议,该协议打开和关闭连接只是为了满足 Http Web 请求。现在,如果您打开另外两个浏览器并在其中一个上查看,您仍然可以在另一个上看到相同的页面(信息),这是很正常的。我认为你应该做的只是避免用户可以签出两次或处理如果有人试图签出一个空篮子(如果用户在第二个浏览器上点击结帐,你就是这种情况) 在这种情况下,您可以只显示一条消息。如果您选择应该定期刷新页面的解决方案,请记住如果用户打开并登录到 250 个不同的会话会发生什么:您的 Web 应用程序将被点击多少次? 如果您接受我的建议,所有用户会话都会收到一个错误页面,例如:bastek 是空的。 我希望这是有道理的

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多