【问题标题】:Session handling for an e-commerce website电子商务网站的会话处理
【发布时间】:2011-05-08 09:39:55
【问题描述】:

我正在使用 PHP 开发一个电子商务网站,我想实现以下功能:如果用户未登录,他可以将产品添加到购物车中,并且在登录后仍然拥有这些产品。此外,该功能必须以相反的方式工作:用户登录,然后将产品添加到购物车。

我认为使用会话 ID 是一种好方法,但经过一些测试后发现这不是最好的方法。

有什么想法吗?

【问题讨论】:

    标签: php shopping-cart


    【解决方案1】:

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

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

    当用户登录时,您将未登录购物车的内容与用户可能已经在其用户特定购物车中的任何物品合并。

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

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

    此处也适用相同的合并原则,并额外检查 cookie 中的产品是否真的有效(它们可能在用户做出选择后被删除,或者用户可能更改了 cookie) .

    【讨论】:

    • 我说这不是一个好方法,因为我已经尝试过了。我使用会话 ID 作为标识符,当用户未登录时,我保存产品和会话 ID。登录后,我检查会话 id 是否匹配,然后复制登录购物车中的产品。第一次运行一切正常,但注销后我仍然有相同的会话 ID。哪个不好。
    • @Psyche 但为什么这是个问题?当用户登录时,您应该将购物车的内容存储到 用户 的数据中,而不是会话数据中。会话 ID 本身应该与购物车的内容无关,它可以随时更改(例如,如果用户的浏览器或连接发生更改)。当用户注销时你在做session_destroy()吗?
    • 好吧,实际上我正在做一个 $_SESSION = array();我认为这是问题所在。
    • @Psyche 是的,绝对使用session_destroy()。同时销毁 cookie,如此处的示例所示:php.net/manual/en/function.session-destroy.php
    【解决方案2】:

    您可以使用 cookie。只需在 cookie 中存储一个唯一标识符,它代表购物篮。无论用户是否登录或退出,Cookie标识符仍然是相同的,因此数据将被持久化。

    【讨论】:

      【解决方案3】:
      session_start();
      $_SESSION["cartitems"] = "1,2,3";
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-11
        • 1970-01-01
        • 2023-03-28
        • 1970-01-01
        • 1970-01-01
        • 2019-10-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多