【问题标题】:How should I store shopping cart items?我应该如何存储购物车物品?
【发布时间】:2012-02-08 13:55:24
【问题描述】:

我正在用 PHP 编写一个简单的购物车,但我不太确定应该如何存储用户选择购买的商品。我应该使用cookies吗?当然,如果我确实使用了 cookie,我会在 cookie 中存储的只是商品 SKU 和数量。我不会将价格存储在 cookie 中,因为用户可能会更改它们。

感谢您的建议!

【问题讨论】:

  • 在此处查看答案以获取有关如何将它们存储在 $_SESSION stackoverflow.com/questions/7610890/… 中的建议
  • @Michael - 为了让未登录的访客仍然可以使用购物车,我需要使用 cookie 将访客链接到他们的购物车,对吗?因为访问者离开网站后会话变量不会被删除吗?如果将购物车存储在数据库中,最好使用三列表(如 user_id、item_id 和数量),表中的一行代表访问者在购物车中的每件商品,还是包含所有商品和数量在一列中使用逗号分隔列表还是对其进行序列化?谢谢!
  • 要链接已离开的用户,您需要序列化购物车并将其存储在数据库中,并在用户的 cookie 中标识他们的一些值。或者制作永不过期的会话。使用数据库来存储单个购物车值而不是序列化字符串需要做更多的工作,但如果你打算这样做,你可能根本不用$_SESSION 而只是使用数据库全部。
  • Xeoncross 在这里写下了完美的答案:stackoverflow.com/questions/12569568/…

标签: php shopping-cart


【解决方案1】:

我建议将购物车项目存储在用户的会话中($_SESSION 变量)。如果您需要它们跨会话持久化,请将它们放入数据库表中。

在会话变量中,它们不会被篡改(它们在服务器端),您不必担心信息泄露(cookie 或 GET 参数中的所有内容都是会话 ID)。

【讨论】:

  • 您建议如何将购物车中的商品和数量存储在数据库中?显然这些参数无法事先确定,因此我无法为购物车中的每个商品创建一列。我是否应该序列化数据并将其存储在一个列中,然后再有另一个具有会话 ID 的列?
  • @user1197328 如果您将它们链接到会话 ID,那么当会话到期时,它们就会消失。您只需三列即可存储购物车项目和数量 - user_iditem_idquantityuser_id 告诉您您正在查看谁的购物车,表格中的每一行都是他们购物车中的一种商品。
  • 我明白了。因此,为了使购物车对访问者保持可用,我需要使用 cookie 将客人链接到他们的购物车?您建议在表格中使用三列;这是否意味着对于访问者购物车中的每件商品,我都会在表格中保留一行?这比使用逗号分隔列表或序列化将所有项目和数量放在一列中更有效吗?感谢您的帮助!
  • @user1197328 不,我是说要让不再保留会话的用户仍然可以使用购物车 - 即丢弃他们的 cookie - 您需要将会话存储在与他们的用户 ID(仅限注册用户)。如果他们清除了 cookie 并且没有帐户,您将没有他们的购物车。 是的,每个条目存储一行比将多个项目放在一列中要好得多。查看philip.greenspun.com/sql 了解有关范式的信息。
【解决方案2】:

您可以使用 $_SESSION 来存储项目 ID 和数量。在用户提交/确认订单时的结帐页面上,您可以根据商品 ID 从数据库中获取商品值并计算实际价格。

【讨论】:

    【解决方案3】:

    如果您使用数据库,请将它们存储在数据库中。 如果您有客人购物,请将它们存储在 temp_cart 中,您可以在其中将该客人链接到会话变量。

    查找 $_SESSION。

    【讨论】:

      猜你喜欢
      • 2020-10-19
      • 2015-10-24
      • 1970-01-01
      • 2011-04-09
      • 2019-12-09
      • 1970-01-01
      • 2015-06-01
      • 2014-01-16
      • 2019-12-31
      相关资源
      最近更新 更多