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

问题描述 投票:6回答:2

我正在创建一个电子商务应用程序,其中我有一个购物车,我目前的结构是,每当用户保存产品时,我把产品放在datatable和datatable到session中,所以直到session没有超时,用户可以拥有他们保存的列表。

我目前的结构是,每当用户保存产品时,我把产品放在datatable和datatable到session中,所以直到session没有超时,用户可以拥有他们保存的列表。

但是我把session超时时间增加到600mins(10Hours),但我担心的是,这是否是存储购物车信息的最佳方法,因为如果有1000个用户同时访问网站,服务器上就会创建1000个session对象,这是否会降低网站的性能。

我不能把它存储在数据库中,因为如果用户是匿名的,我就没有该用户的独特之处,这样一来,如果有1000个用户访问网站,所有的产品都会被合并,我将无法获取当前用户保存的产品。

有没有其他更好的方法来解决这个问题。

asp.net database session-variables shopping-cart
2个回答
22
投票

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

在我们的电子商务网站上,我们为匿名用户创建了一个cookie。这样做之后,你有两种解决方案。

  1. 在cookie中存储整个购物篮(基本上是产品ID+数量的列表,更多的取决于您的需求策略)或其他技术(如localStorage)。
  2. 在cookie中存储一个唯一的ID,并以唯一的cookie ID作为标识符将篮子存储在数据库中(临时表)。一旦用户登录系统,你就把这些数据移到用户篮子表中。

您可以很容易地改变cookie的到期时间(或删除它),而不会影响服务器的整体性能。对于ID,您可以使用 Guid.NewGuid().

更新。

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

  1. 用户访问网站
  2. 您创建了一个没有过期日期的cookie:cartId的值是 Guid.NewGuid() 名字和数值由你决定)。
  3. 用户点击 "购买"
  4. 在服务器端获取cookie,并将cartId,productquantity添加到 "AnonymousBasket "表中。
  5. 想象一下,用户离开网站,一个月后再来,cookie还在这里。
  6. 如果匿名用户进入他的购物篮,你能够根据cookie的值获得他的产品和数量。
  7. 如果用户登录,你可以删除cookie,并将数据从 "AnonymousBasket "表中移到 "Basket "中。
  8. 现在您的登录用户可以进行结账了

有了这个解决方案,所有的东西都在数据库中持久存在,不需要会话。你可以像对会话一样改变你的cookie的到期时间,或者你可以在没有任何风险的情况下清理临时表,或者对匿名用户进行统计(为什么他们没有继续结账,平均有多少商品,哪件商品,...)。


0
投票

这个想法如何,如果匿名用户将物品放入篮子里,sql的临时数据表就会被填满。每个商品的ID是session.ID(由asp随机字符串)。

如果用户想完成这个过程,在他完成添加物品到购物车后,他将登录,一切都很好。

如果用户不再继续购物,而datatable已经被填满,则在session.timeout时调用一个脚本。這個腳本從資料庫表中刪除所有項目,WHERE userID=session.ID (=anonymous)。

好主意还是坏主意?

© www.soinside.com 2019 - 2024. All rights reserved.