【问题标题】:storing and loading cart in the database在数据库中存储和加载购物车
【发布时间】:2010-02-19 02:06:09
【问题描述】:

我正在为客户编写电子商务网站/管理界面。他们正在做一些 B2B,因此他们希望从数据库中保存/加载购物车,这样如果用户关闭浏览器并重新打开它,购物车就会完好无损。

该应用程序正在使用 Zend 框架,我一直在寻找 Zend_Session_SaveHandler_DbTable。所以我可以轻松地将会话保存在数据库中,我想在会话中加载数据库的相反情况呢。

此外,如果仅在用户重新打开浏览器而不是在每个页面上加载该购物车项目,那将是很好的,因为它会对性能产生一些影响。

有什么建议吗?

一种子问题:我想Zend_Session 正在使用$_SESSION 所以一切都基于 php 会话 id,是否有可能改变它正在使用的有 id。

我正在考虑生成我的唯一 ID 并使用 cookie 将其推送给客户端。

注意 2:用户可以构建一些未登录的购物车,因此我不能依赖登录过程 ....

【问题讨论】:

标签: php database zend-framework session


【解决方案1】:

您需要做的第一件事是弄清楚如何使会话在用户关闭浏览器之后持续存在。查看手册的 Zend_Session 配置部分:

http://framework.zend.com/manual/en/zend.session.global_session_management.html

请参阅“remember_me_seconds”选项的部分。完成这项工作后,您在会话中存储的任何内容都将在用户改天回来时可用。

至于在会话中存储购物车,我建议创建一个包含此信息的“购物车”类。然后,您可以将整个对象存储在会话中,也可以将数据存储在数据库的“购物车”表中,并且仅将购物车的 ID 存储在用户会话中。然后在后续访问中,您只需检查 ID 是否存在,如果存在则加载购物车。

【讨论】:

  • @Tim:感谢您的回答,实际上,在发布这个问题几个小时后,我自己发现了有关 rememberMe 功能的信息,并且它完成了工作。
【解决方案2】:

当我想在两个弱点之前存储网格的列设置时,我遇到了和你一样的问题。 而且我在数据库中没有整个会话。如果购物车中有东西,我只是检查会话。如果会话中没有任何内容,请从 db 加载。当然,每次更换篮子时都会保存到 db。

我使用了来自 Session_Namespace::to_array() 方法的序列化数组。不是整个 Session_Namespace,因为我无法加载它。

您可以使用 eill 告诉您的标志,即您尝试从 db 加载一次,例如会话中 db 中没有相同的购物车,并且您不想尝试在每个请求中加载购物车。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-26
    • 1970-01-01
    • 2018-05-09
    相关资源
    最近更新 更多