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

31 php cookies session-variables

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

提前感谢您的考虑.

Xeo*_*oss 43

也不

没有大型网站敢于在会话或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?)
}
Run Code Online (Sandbox Code Playgroud)

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

会议

普通的PHP会话由两部分组成

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

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

@Travesty3所说的是你可以有两个 cookie - 一个用于会话,另一个是"保持登录"cookie(存在时间长于会话cookie),或者是单独cookie中的数据副本.

  • 我认为这个答案更多的是针对企业的政策而不是技术问题的答案.你可以在回答其技术性之后再提出替代方案. (2认同)

Jvd*_*erg 6

我会把它存放在SESSION中.我的愿望清单相当长,我担心它不适合COOKIE可能占用的4K存储空间.它会强制您将会话时间设置为更长的时间段.

注意:有些国家(如荷兰,我所在的国家/地区)对Cookie有非常严格的政策,您可能会被立法强制使用Sessions.

  • 你从没见过我老婆逛街! (19认同)

Muk*_*shD 6

正如Xeoncross所指出的,存储任何可能的分析信息非常重要.所以不应该完全依赖会话和cookie.

一种可能的方法是 -

如果未登录,请使用会话

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

登录时使用数据库

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

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

用户登录时

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

这将使数据持久,即使用户注销或更改机器,但直到用户尚未登录,才能永久存储信息,因此不会持久存在.

获取所需数据

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

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