2011-05-08 35 views
0

我正在使用PHP的电子商务网站,我想实现以下功能:如果用户未登录,他可以将产品添加到购物车,登录后仍然有这些产品。另外,该功能必须以其他方式工作:用户正在登录,然后他将产品添加到购物车。电子商务网站的会话处理

我认为这样做的好方法是使用会话ID,但在做了一些测试后发现这不是最好的方法。

任何ideeas?

回答

3

为什么使用会话不是最好的方式呢?我会说这是。

您可以拥有单独的基于会话的“未登录”购物车结构,即正常购物车的精确副本。如果用户未登录,则产品将存储在那里。

当用户登录时,您会将未登录的购物车的内容与用户可能已经拥有的用户专用购物车中的任何物品合并。

该点也是处理产品选择可能产生的任何冲突的地方(例如,已登录用户的购物车中已存在所选产品)。

使用@Codemwnci推荐的方法来存储产品,或者购物车ID也是一个好主意,因为它允许用户稍后回来,并且仍然有他们的购物车内容,您可能需要。

合并的原理也适用于此处,并附加检查cookie中的产品是否真的有效(它们可能在用户做出选择后被删除,或者用户可能已经更改了cookie )。

+0

我说这不是一个好方法,因为我已经试过了。我使用会话ID作为标识符,当用户未登录时,我保存产品和会话ID。登录后,我会检查会话ID是否匹配,然后将产品复制到登录购物车中。在第一次运行时一切正常,但注销后我仍然有相同的会话ID。哪个不好。 – Psyche 2011-05-08 09:53:30

+0

@Psyche但为什么这是一个问题?用户登录时,应将购物车内容存储到*用户*的数据中,而不是会话数据。会话ID本身与购物车的内容无关,可随时更改(例如,如果用户的浏览器或连接发生变化)。当用户注销时你正在做一个'session_destroy()'吗? – 2011-05-08 09:59:43

+0

好吧,其实我正在做一个$ _SESSION = array();我认为这是问题。 – Psyche 2011-05-08 10:01:58

0
session_start(); 
$_SESSION["cartitems"] = "1,2,3"; 
1

您可以使用cookie。只需在cookie中存储一个代表购物篮的唯一标识符。无论用户是否登录或注销,Cookie标识符都将保持不变,因此数据将被保留。