购物车持久性:$_SESSION还是浏览器 cookie?

2022-08-30 13:22:47

在没有用户名/登录名的电子商务网站上,使用PHP $_SESSION变量或浏览器cookie将商品保留在购物车中会更好吗?我倾向于_SESSION美元,因为饼干可以被禁用,但想听听你的想法。

提前感谢您的考虑。


答案 1

也不

没有大型网站敢于将用户的购物车存储在会话或cookie中 - 这些数据只是有价值的。

客户正在购买什么,何时选择商品,购买多少商品,为什么没有完成结帐等。对您的业务都非常非常重要

使用数据库表来存储此信息,然后将其链接到用户的会话。这样,您就不会丢失信息,并且可以返回并根据用户购物车构建统计信息或解决结帐过程中的问题。

记录所有可能的内容。

数据库架构

下面是一个简化的示例,说明这在数据库级别可能如何看。

user {
    id
    email
}

product {
    id
    name
    price
}

cart {
    id
    product_id
    user_id
    quantity
    timestamp    (when was it created?)
    expired      (is this cart still active?)
}

您可能还希望将购物车表拆分为更多表,以便跟踪购物车的修订。

会话

普通 PHP 会话由两部分组成

  1. 数据(存储在服务器上的文件中)
  2. 提供给用户代理(浏览器)的唯一标识符

因此,它不是 vs - 它是 + = “会话”。但是,您可以通过使用包含数据的单个加密cookie来修改此设置(因此您不需要标识符来查找数据)。另一种常见的方法是将数据存储在 memcached 或数据库中,而不是文件系统中,以便多个服务器可以访问它。$_SESSION$_COOKIE$_SESSION$_COOKIE

@Travesty3说的是,您可以拥有个cookie - 一个用于会话,另一个是“保持登录”Cookie(比会话cookie存在的时间更长),或者是单独cookie中的数据副本。


答案 2

正如Xeoncross所指出的那样,存储任何可能的信息以进行分析非常重要。因此,人们不应该完全依赖会话和cookie。

一种可能的方法是-

如果未登录,请使用会话

如果用户未登录,您可以使用PHP存储和检索会话中的购物车项目和愿望清单项目$_SESSION

登录时使用数据库

如果用户已登录,则可以考虑以下两个选项之一 -

  • 将购物车项目或愿望清单项目单独存储在数据库中
  • 将购物车项目或愿望清单项目存储在数据库和会话中(这将保存您的一些数据库查询)

当用户登录时

当用户登录时,从会话中获取所有购物车项目和愿望清单项目并将其存储在数据库中。

这将使数据持久化,即使用户注销或更改计算机,但在用户未登录之前,无法永久存储信息,因此它不会持久保存。

获取所需数据

每当您尝试访问购物车或愿望清单时,请进行以下检查 -

  • 如果用户未登录,则查看会话
  • 如果用户已登录,则查询数据库(如果您单独存储在数据库中),否则,如果您将会话与数据库一起更新,则可以只查看会话

推荐