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

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

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

我目前的结构是,每当用户保存产品时,我都会将产品放入数据表和数据表到 session 中,因此在 session 未超时之前,用户可以获得他们保存的列表。

p>

不过,我已将 session 超时增加到 600 分钟(10 小时),但我担心的是,这是存储购物车信息的最佳方法吗,因为如果有 1000 个用户同时访问该站点,那么在服务器上创建 1000 个 session 对象,它不会降低我网站的性能。

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

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

最佳答案

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

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

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

您可以轻松更改 cookie 的过期时间(或将其删除),而不会影响服务器的整体性能。对于 ID,您可以使用 Guid.NewGuid()

更新:

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

  1. 用户访问网站
  2. 您创建一个没有过期日期的 cookie:具有值 Guid.NewGuid() 的 cartId(名称和值由您决定)。
  3. 用户点击“购买”
  4. 获取 cookie 服务器端并将 cartId、产品/数量添加到“AnonymousBasket”表
  5. 假设用户离开网站并在一个月后回来,cookie 仍会保留在这里
  6. 如果匿名用户进入他的购物篮,您可以根据 cookie 的值获得他的产品和数量。
  7. 如果用户登录,您删除 cookie 并将数据从表“AnonymousBasket”移动到“Basket”
  8. 现在您的登录用户可以处理结帐

有了这个解决方案,一切都保存在数据库中,不需要 session 。您可以像为 session 所做的那样更改 cookie 的到期时间,或者您可以毫无风险地清理临时表或创建匿名用户的统计信息(为什么他们没有继续结帐,平均有多少项目,哪个项目,. ..).

关于asp.net - 在 asp.net 的购物车中存储产品信息的理想方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18379235/

相关文章:

c# - 路由可选参数

sql - SQL Server中如何创建数据库的别名

sql - 我将如何从每列中删除空值

session - Laravel 4.1 session 变量被随机遗忘

c# - Asp.Net Web Api Multipost 参数

javascript - 如何禁用 GridView 中的链接按钮

c# - 运算符 "&&"无法应用MVC

php - 不正确的日期时间值数据库错误编号 : 1292

spring - 访问 Thymeleaf 模板中的 session 属性

重定向后 Grails 2.1.0 app tomcat 7.0.22 session 为空