我正在为客户编写电子商务网站/管理界面。他们正在做一些B2B,所以他们希望从数据库中保存/加载购物车,这样如果用户关闭浏览器并重新打开它,购物车就完好无损。
该应用程序正在使用Zend Framework,我一直在寻找Zend_Session_SaveHandler_DbTable
。所以我可以轻松地将数据库中的会话保存到我希望在会话中加载数据库的相反情况。
如果只有当用户重新打开浏览器不在每个页面上才能加载该购物车项目,那将是很好的,因为它会对性能产生一些影响。
有什么建议吗?
有点子问题:我认为Zend_Session
正在使用$_SESSION
所以一切都基于php会话ID,是否有可能更改使用id的内容。
我正在考虑生成我的唯一ID并使用cookie将其推送到客户端。
注意2:用户可以构建一些未被记录的购物车,因此我不能依赖登录过程....
答案 0 :(得分:1)
当我想在两个弱点之前存储网格的列设置时,我遇到了同样的问题。 而且我没有在DB中进行整个会话。我只是检查会话是否有购物车中的东西。如果会话中有nohing,请从db加载。当然,篮子的每次更改都会保存到db。
我使用了Session_Namespace :: to_array()方法的序列化数组。不是整个Session_Namespace因为我无法加载它。
你可以使用一个eill告诉你的标志,你尝试从db加载一次,例如在会话中db中没有购物车,你不想尝试每次请求加载购物车。
答案 1 :(得分:1)
您需要做的第一件事是弄清楚如何在用户关闭浏览器之后保持会话。检查手册的Zend_Session配置部分:
http://framework.zend.com/manual/en/zend.session.global_session_management.html
请参阅'remember_me_seconds'选项中的部分。一旦你完成这项工作,当用户再次回来时,你在会话中存储的任何内容都将可用。
至于在会话中存储购物车,我建议创建一个包含此信息的“购物车”类。然后,您可以将整个对象存储在会话中,也可以将数据存储在数据库的“carts”表中,只将该购物车的ID存储在用户的会话中。然后在随后的访问中,您只需要检查是否存在ID并加载购物车(如果存在)。