我正在为我的项目使用 php laravel 5.2。我想用数据库表(表名是购物车)设计购物车。购物车表有列名 session_id 来确定每个用户的购物车。
问题是:
- 当用户登录时,session id 会发生变化,我丢失了该用户的购物车(以及 sessionId 会发生变化的其他情况)。
- 当 session 过期的购物车仍然存在于数据库中并且不再被使用时,我该如何解决并删除这些购物车?
或任何其他使用数据库设计购物车的想法?
最佳答案
确实没有理由使用 session ID 作为购物车所有者的标识符。处理购物车背后的逻辑非常简单,它等同于以下内容:
- 当未登录的用户(我们称之为访客)访问您的网站时,Laravel 会自动创建一个 session 。
- 如果该 guest 用户向购物车中添加了一些东西,那么添加到购物车中的项目/产品将存储在 session 中。没有理由将访客的购物车信息存储在数据库中,因为该 session 是暂时的,仅当访客在您的网站上处于事件状态时才需要。一旦该访客用户离开网站(即浏览器关闭或 session 过期),如果他再次回来,您将无法(实际上)识别同一用户(因此使用的术语是访客) .如果您想让客人下订单,您可以使用 session 购物车信息来下订单(客人仍然不需要数据库)。
- 只有当您处理已注册且已登录<的用户时,才将购物车信息存储在数据库(您的
购物车
表)中才有意义/强>。在这种情况下,将购物车项目链接到用户的标识符是user_id
,因为用户只能有一个购物车。所以cart
表可以像这样简单:
+---------+------------+
| user_id | product_id |
+---------+------------+
- 存储
user_id
和product_id
实际上是您处理购物车项目所需要的全部,因为它只是一个引用用户的列表,其详细信息存储在users
表和一个产品,其详细信息存储在products
表中。
当然,当 guest 用户将一些商品添加到购物车(此时存储在 session 中)时,如果该 guest 决定在 session 购物车中有东西时登录,添加(更多一旦登录过程成功,这些项目与数据库完全同步。
因此,如果用户上次登录时数据库购物车中已经有一些产品,则当前 session 购物车中的新产品将添加到旧产品中。尽管您可以选择同步项目或完全覆盖它们以仅保留新的购物车项目。
因此,遵循上述准则就无需从数据库中删除购物车商品,因为数据库中永远只有与注册用户相关联的购物车商品需要保留在那里,以便下次用户登录时可用中。
关于php - 如何在 laravel 中跟踪购物车表的 sessionID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36234548/