在asp.net中将产品信息存储在购物车中的理想方式

时间:2013-08-22 11:33:28

标签: asp.net database session-variables shopping-cart

我正在创建一个电子商务应用程序,其中我有一个购物车。

我目前的结构是,每当用户保存产品时,我都会将产品放入数据表和数据表中,直到会话没有超时,用户才能拥有他们保存的列表。

我无法将其存储在数据库中,因为如果用户是匿名的,我没有关于用户的独特之处这样,如果1000个用户访问该网站,所有产品将合并,我将无法获取当前用户保存的产品。

还有其他更好的解决方法吗?

2 个答案:

答案 0 :(得分:20)

你不应该这样实现。 10个小时的会话时间非常长,如果您的网站上有1000个用户,您的服务器将受到影响,并会产生一些性能问题。

在我们的电子商务网站上,我们为匿名用户创建了一个Cookie。完成后,您有两个解决方案:

  1. 将整个购物篮存放在cookie中(基本上是产品ID列表+数量,更多取决于您的需求/策略)或其他技术(例如localStorage)。
  2. 在cookie中存储唯一ID,并将该篮子存储在数据库(临时表)中,并使用唯一的Cookie ID作为标识符。用户登录系统后,将这些数据移动到用户购物篮表。
  3. 您可以轻松更改Cookie的过期时间(或将其删除),而不会影响服务器的整体性能。对于ID,您可以使用Guid.NewGuid()

    <强>更新

    关于我的第二个解决方案的更多细节 - 场景:

    1. 用户访问网站
    2. 您创建的Cookie没有过期日期:cartId的值为Guid.NewGuid()(名称和值由您决定)。
    3. 用户点击“购买”
    4. 获取cookie服务器端并将cartId,产品/数量添加到“AnonymousBasket”表
    5. 想象一下,如果用户离开网站并在一个月后回来,那么cookie仍然会在这里
    6. 如果匿名用户转到他的购物篮,您可以根据cookie的价值获得他的产品和数量。
    7. 如果用户登录,则删除cookie并将数据从“AnonymousBasket”表移动到“Basket”
    8. 现在,您已登录的用户可以处理结帐
    9. 使用此解决方案,所有内容都保留在数据库中,不需要会话。您可以像更改会话一样更改Cookie的到期时间,或者您可以毫无风险地清理临时表或创建匿名用户的统计信息(为什么他们没有继续结帐,平均有多少项,哪个项目,。 ..)。

答案 1 :(得分:0)

这个想法怎么样,如果匿名用户将项目放到购物篮中,则会在sql处填充一个临时数据表。每个项目的ID是session.ID(asp中的随机字符串)。

如果用户想完成此过程,则需要在完成向购物车中添加商品后登录;一切都很好。

如果用户将不继续购物,并且数据表已被填充;您在session.timeout调用脚本。此脚本从数据库表WHERE userID = session.ID(=匿名)中删除所有项目

好主意还是坏主意?