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

Php 如何跟踪laravel中购物车表的sessionID,php,mysql,database,laravel,session,Php,Mysql,Database,Laravel,Session,我在我的项目中使用PHPLaravel5.2。我想用数据库表设计购物车(表名为cart)。购物车表具有列名session\u id以确定每个购物车用户 问题是: 当用户登录会话id将更改,并且我将丢失该用户的购物车时(以及sessionId将更改的其他条件) 当会话过期的购物车仍然存在于数据库中且不再使用时,我如何才能解决此问题并删除此类购物车 或者使用数据库设计购物车的任何其他想法?实际上没有理由使用会话ID作为购物车所有者的标识符。处理购物车的逻辑非常简单,它等同于以下内容: 当未登录的用

我在我的项目中使用PHPLaravel5.2。我想用数据库表设计购物车(表名为cart)。购物车表具有列名session\u id以确定每个购物车用户

问题是:

  • 当用户登录会话id将更改,并且我将丢失该用户的购物车时(以及sessionId将更改的其他条件)
  • 当会话过期的购物车仍然存在于数据库中且不再使用时,我如何才能解决此问题并删除此类购物车

  • 或者使用数据库设计购物车的任何其他想法?

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

    • 当未登录的用户(我们称之为访客)访问您的网站时,Laravel会自动创建一个会话
    • 如果该来宾用户向购物车添加了内容,则添加到购物车的项目/产品将存储在会话中。没有理由将客户的购物车信息存储在数据库中,因为该会话是暂时的,仅当客户在您的网站上处于活动状态时才需要。一旦该访客用户离开网站(即浏览器关闭或会话过期),如果他回来,您将无法(现实地)识别同一用户(因此使用的术语是访客)。如果您希望允许来宾下单,您可以使用会话购物车信息下单(仍然不需要来宾数据库)
    • 只有当您与已登录的注册的用户打交道时,才有必要将购物车信息存储在数据库(您的
      购物车
      表)中。在这种情况下,将购物车项目链接到用户的标识符是
      用户id
      ,因为用户只能有一个购物车。因此,
      cart
      表可以简单到:
    • 存储
      user\u id
      product\u id
      实际上是处理购物车项目所需的全部,因为它只是一个列表,其中引用了将详细信息存储在
      users
      表中的用户和将详细信息存储在
      products
      表中的产品
    当然,当来宾用户将某些项目添加到购物车(此时存储在会话中)时,如果该来宾决定在会话购物车中有内容的情况下登录,那么在登录过程成功后,将这些项目添加(更准确地说是同步)到数据库可能是有意义的

    因此,如果用户上次登录时数据库购物车中已有一些产品,则当前会话购物车中的新产品将添加到旧产品中。尽管您可以选择是否同步这些项目,或者完全覆盖它们以仅保留新购物车项目



    因此,按照上述指导原则,无需从数据库中删除购物车项目,因为数据库中只有与注册用户链接的购物车项目需要留在那里,以便这些用户下次登录时可用。

    您可以依赖cookie:

    或者更好的是为laravel制作的购物车套装:


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

    这似乎是一个不错的软件包。当用户将产品添加到购物车时,他们应该能够关闭浏览器会话,几天后重新访问网站,并且仍然可以看到购物篮中的项目。取而代之的是使用cookies,但也可以将Cart持久化到DB,因为它提供了有价值的统计信息,例如经常选择哪些产品,因此很受欢迎。
    +---------+------------+
    | user_id | product_id |
    +---------+------------+