非注册用户的购物车

nan*_*ano 22 php session shopping-cart

我正在制作一个涉及购物车的网站.有两个主要要求:

  1. 用户体验的人希望登录/身份验证成为整个工作流程的最后一步.用户可以进行所有购物,并且仅在退房时被要求登录.

  2. 除非用户(已注册或未注册)退房,否则购物车不应过期(即使在浏览器关闭时也不会过期).

在上面的上下文中,我有关于维护购物车状态的以下问题:

我应该使用基于文件或数据库会话吗?请记住,这将是未注册用户.我担心的是,我最终会在数据库中拥有大量记录.

另一种选择似乎是将购物车内容放在加密的cookie中,但是cookie文件有一个大小限制.

在这种情况下你会做什么?我真的很感激你的答案.

Jai*_*han 16

  1. 跟踪用户.使用编码到具有n年到期的cookie的GUID .

  2. 存放购物袋.您不希望将行李存放在cookie中,主要是因为它可能的大小.这样就可以选择将其持久保存到介质中并从介质中检索它.使用除数据库之外的任何东西就像回到过去一样,数据库擅长存储和检索数据.

  3. 管理你的购物袋.现在,您的架构问题,首先,如果您要对数据库中的购物袋运行查询(即多少个购物袋包含项目x),您可能需要传统的关系架构.然而,这在插入方面存在开销.更新,选择(和加入)和删除行李数据(在某些时候,您将拥有永远不会再次使用但占用宝贵磁盘空间的行李).对于一个繁忙的站点,这是每秒少数Traranactions,但任何数据库都应该能够应对.如果您不需要查询数据库中的购物袋,则可以将其存储为XML.只需序列化包并将其转储到表中,PK作为存储在用户cookie中的GUID.这将比传统模式快得多,而且如果对关系模式提出要求,您将来可能总是撕掉XML.

这就是我们所做的(Xml Bag),我们拥有一百万以上的客户群.


Eri*_* J. 6

我会在文件管理会话上使用数据库管理会话.确保你有一个会话时间戳,这样你最终可以杀死旧的会话(如果已经12个月,购物者可能不会回来购物车中最初的商品).

使用数据库而不是文件执行此操作将使最终过期的信息更容易过期.

请注意,数据库会话只有在用户计算机上绑定的cookie时才会有效.如果用户从其他浏览器返回商店,他们将无法找到他们的会话.如果两个人共用同一台计算机,他们找到彼此的会话.希望购物车中不会有任何可能令人尴尬的物品......