非注册用户的购物车

时间:2009-09-03 22:38:00

标签: php session shopping-cart

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

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

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

  3. 在上述情况下,我对维持购物车的状态提出以下问题:

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

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

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

6 个答案:

答案 0 :(得分:16)

  1. 跟踪用户。使用GUID 编码成一个带有的cookie n 年满。

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

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

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

答案 1 :(得分:6)

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

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

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

答案 2 :(得分:1)

在Cookie中存储AnonymousSessionID,您可以将数据库中的购物车与其关联。

然后,您将有一个调度程序任务在一段时间(比如一天)之后删除匿名会话。这将使您的数据库保持清除已放弃的会话。

如果用户注册,您可以永久地将购物车与其帐户重新关联。如果用户下了订单,则清空他们的购物车。

答案 3 :(得分:1)

如果您在这里使用ASP.NET,那就是我要做的事情:

  • 使用Profile尽快捕获用户的电子邮件(如果他们没有完成订单,则通过电子邮件发送给他们)。即使用户实际上没有真正注册过,也可以启用持久保存到aspnet数据库的匿名配置文件属性。
  • 将表示订单的XML包粘贴到会话中。这将保留在具有常规身份ID的数据库中。
  • 将购物车的ID存储在ASP.NET Profile中。当会话到期时,您可以从配置文件中的ID重新加载它。这样做的好处是用户永远不会在cookie中看到购物车ID,您可以轻松地链接会员/个人资料数据库与您用于订单的商店之间的记录

(不要尝试在配置文件中存储XML顺序。我认为这会要求性能问题。但理论上我可以假设)

答案 4 :(得分:0)

根据这些规范,我会选择基于数据库的会话状态。但是你应该对你选择的Web服务器中如何处理会话状态做一些重读。因为你希望能够将状态恢复到正确的人。

答案 5 :(得分:0)

我认为你有一些期望要管理,或者你可能不清楚要求。

  
      
  1. 用户体验的人希望登录/身份验证成为最佳选择   整个工作流程的最后一步。该   用户可以做所有的购物和   被要求仅在当时登录   退房。
  2.   
  3. 购物车不应过期(即使在浏览器关闭时也不会过期)   除非用户(已注册或未注册)   退房。
  4.   

具体来说,一个匿名的,未登录的用户的购物车正在保存?那是疯了。确保这不是一个期望,并在您的设计文档中予以澄清。

相关问题