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

Abb*_*bas 6 database asp.net shopping-cart session-variables

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

我目前的结构是,每当用户保存产品时,我将产品放入数据表并将数据表放入会话,因此在会话未超时之前,用户可以拥有他们保存的列表.

然而,我已经将会话超时时间增加到600分钟(10小时),但我担心的是,这是存储购物车信息的最佳方法,因为如果有例如1000个用户同时访问该网站,则会创建1000个会话对象在服务器上,它不会恶化我的网站的性能.

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

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

gla*_*rou 21

你不应该这样实现.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,产品/数量添加到"AnonymousBasket"表中
  5. 想象一下,用户离开网站并在一个月后回来,cookie仍然会在这里
  6. 如果匿名用户转到他的购物篮,您可以根据cookie的价值获得他的产品和数量.
  7. 如果用户登录,则删除cookie并将数据从"AnonymousBasket"表移动到"Basket"
  8. 现在,您登录的用户可以处理结帐

使用此解决方案,所有内容都保留在数据库中,不需要会话.您可以像更改会话一样更改Cookie的到期时间,或者您可以毫无风险地清理临时表或创建匿名用户的统计信息(为什么他们没有进行结帐,平均有多少项,哪个项目,. ..).