在没有用户名/登录信息来保存购物车数据的电子商务网站上,使用PHP $ _SESSION变量或浏览器cookie来保存购物车中的商品会更好吗?我倾向于$ _SESSION,因为cookie可以被禁用,但是想听听你的想法。
提前感谢您的考虑。
答案 0 :(得分: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?)
}
您可能还想将购物车表拆分为更多表格,以便跟踪购物车的修订。
普通PHP会话由两部分组成
因此,它不是$_SESSION
vs $_COOKIE
- 它是$_SESSION
+ $_COOKIE
=“会话”。但是,有一些方法可以通过使用包含数据的单个加密cookie来修改它(因此您不需要标识符来查找数据)。另一种常见的方法是将数据存储在memcached或数据库而不是文件系统中,以便多个服务器可以访问它。
@ Travesty3所说的是你可以拥有两个 cookie - 一个用于会话,另一个是“让我登录”的cookie(存在时间比会话cookie长) ,或单独cookie中的数据副本。
答案 1 :(得分:6)
我会把它存放在SESSION中。我的愿望清单相当长,我担心它不适合COOKIE可能占用的4K存储空间。它会强制您将会话时间设置为更长的时间段。
注意:有一些国家(如荷兰,我所在的国家/地区)对Cookie有非常严格的政策,您可能会被法律强制要求使用会话。
答案 2 :(得分:6)
正如Xeoncross所指出的,存储任何可能的分析信息非常重要。所以不应该完全依赖会话和cookie。
可能的方法是 -
如果未登录
,请使用会话如果用户未登录,您可以使用PHP中的$_SESSION
在会话中存储和检索购物车项目和愿望清单项目
登录后使用数据库
如果用户已登录,则可以考虑以下两个选项之一 -
用户登录时
当用户登录时,从会话中获取所有购物车项目和心愿单项目并将其存储在数据库中。
这将使数据持久,即使用户注销或更改机器,但直到用户尚未登录,才能永久存储信息,因此不会持久存在。
获取所需数据
每当您尝试访问购物车或心愿单时,请执行以下检查 -
答案 3 :(得分:3)
有些要点可以提供帮助:
<强>饼干:强>
<强>会话强>
我个人会参加会议,因为我假设是一个小/ meddium听力页面。如果它增长,那么使用简单的数据库结构来存储这些数据会更好,维护计划可以获得不必要的数据(例如:选择某些产品但不进行结账的客户)。
答案 4 :(得分:3)
您可以考虑使用两者。
$_SESSION
的缺点是在浏览器关闭时会话被清除。
使用会话,但尝试从cookie中填充$ _SESSION数据(如果可用)。
答案 5 :(得分:2)
我会使用一个会话。如果用户禁用了cookie,则会话将无法启动,因为会话ID存储在cookie中用户的计算机上。
您可能需要查看一些设置,以便尝试延长会话时间。
当用户通过设置lifetime
参数设置session_set_cookie_params()
关闭浏览器时,防止删除会话Cookie。此功能需要在session_start()
您可能还希望通过在php.ini中修改会话垃圾回收设置session.gc_probability, session.gc_divisor, session.gc_maxlifetime
或使用ini_set()
如果您在服务器上运行其他网站并修改上述垃圾收集设置,则需要在php.ini中设置它们以便它们适用于所有网站,或者如果您使用ini_set()
则您还可以通过修改session_save_path()
来查看将这些会话保存到与其他网站不同的目录。这再次在session_start()
之前运行。这样可以防止其他网站的垃圾收集,从而清除某个特定网站的扩展会话。
我还建议在php.ini session.entropy_file = /dev/urandom, session.entropy_length = 256, session.hash_function = sha512
中设置以下会话设置。这应该会给你一个加密强大的会话ID,碰撞的可能性非常小。
并确保您的网站上有SSL证书,以防止中间人攻击您的会话ID。
显然,用户仍然可以决定手动清除所有带有会话ID cookie的cookie,但这是我准备采取的风险。如果我在购物车系统中途并且没有退房,我就不会去清理我的饼干。我仍然认为会话比使用普通cookie更好。
只要您是唯一可以访问会话目录并且会话ID很强的网站,那么数据就足够安全了。通过延长服务器的会话存储时间,您的数据可以保留在服务器上。
您可以采取进一步措施,使您的会话更加强大。每20分钟重新生成一次会话ID,复制数据。还要根据数据库中的IP地址记录会话ID,并检查特定IP地址是否尝试在给定时间内发送超过X个会话ID,以防止有人试图强制使用会话ID。
您还可以将数据存储在由会话ID链接的数据库中,而不是存储在服务器上的会话文件中。但是,这仍然依赖于存储在cookie中的会话ID,并且可能随时消失。真正确保用户不会丢失购物车的唯一方法是让他们先登录并存储在数据库中。