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

时间:2016-03-26 11:08:15

标签: php mysql database laravel session

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

问题是:

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

2 个答案:

答案 0 :(得分:6)

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

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

当然,当访客用户将一些商品添加到购物车(此时存储在会话中)时,如果该访客决定在会话购物车中放入商品时登录,则添加可能是有意义的(更多在登录过程成功后,将这些项与数据库完全同步。

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

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

答案 1 :(得分:0)

你可以依赖Cookies:

https://laravel.com/docs/5.2/requests#cookies

甚至更好的购物车包装为laravel:

https://github.com/Crinsane/LaravelShoppingcart

我在Laravel 5电子商务实施中使用的这个包。