如何在laravel中跟踪购物车表的sessionID

moh*_*Jsh 2 php mysql database session laravel

我正在为我的项目使用php laravel 5.2.我想用数据库表设计购物车(表名是购物车).cart表具有列名session_id,用于确定每个用户的购物车.

问题是:

  1. 当用户登录的会话ID将更改并且我丢失该用户的购物车(以及sessionId将更改的其他条件).
  2. 当会话过期购物车仍然存在于数据库中时,它还没有被使用,我怎么能搞清楚并删除这些类型的购物车?

或任何其他购物车设计与数据库的想法?

Bog*_*dan 6

实际上没有理由使用会话ID作为购物车所有者的标识符.处理购物车的逻辑非常简单,它等同于以下内容:

  • 当未登录的用户(让我们称之为访客)访问您的网站时,Laravel会自动创建会话.
  • 如果该访客用户向购物车添加了某些内容,则添加到购物车的商品/产品将存储在会话中.没有理由将访客的购物车信息存储在数据库中,因为该会话是暂时的,只有在访客在您的网站上处于活动状态时才需要.一旦该访客用户离开该站点(即浏览器关闭或会话过期),如果他回来(那么使用的术语是访客),则无法(真实地)识别同一用户.如果您想允许客人下订单,您可以使用会话购物车信息下订单(客人仍然不需要数据库).
  • cart当您处理已登录注册用户时,将购物车信息存储在数据库(您的表)中才有意义.在这种情况下,将购物车项链接到用户的标识符是,因为用户只能有一个购物车.所以表格可以简单如下:user_idcart
+---------+------------+
| user_id | product_id |
+---------+------------+
Run Code Online (Sandbox Code Playgroud)
  • 存储user_idproduct_id实际上你只需要处理一个购物车项目,因为它只是一个列表,它引用了users表格中存储详细信息的用户以及表格中存储详细信息的产品products.

当然,当访客用户将一些项目添加到购物车(此时此时存储在会话中)时,如果该访客决定在会话购物车中放入内容时登录,则添加(更准确地说是同步)可能是有意义的登录过程成功后,具有数据库的那些项目.

因此,如果用户在他/她登录时已经在数据库购物车中已经有一些产品,那么来自当前会话购物车的新产品将被添加到旧产品中.虽然您可以选择同步项目或完全覆盖它们以仅保留新购物车项目.


因此,遵循上述准则,无需从数据库中删除购物车项目,因为数据库中只会有链接到注册用户的购物车项目,这些商品需要在下次用户登录时保持可用状态.