Magento有两种存放购物车的方法。登录用户可以定义购物车保存,只要您想要定义它并且它存储在与用户编号相关的数据库中。未登录的用户似乎受到您的网站保留其会话变量的时间限制。这引出了两个问题。
1)我认为未登录的用户购物车与会话超时有关吗?
2)由于Magento / Varien建议用很短的时间来杀死会话变量(通常只有4个小时),如果问题1是真的,有没有办法保持未登录的购物车而不改变会话超时变量?
答案 0 :(得分:22)
根据我的理解,推车被保存为报价,即使对于客人也是如此。登录用户的客户ID与报价一起存储,客人不会因此他们的报价具有空客户ID,因此您可能会发现商店在数据库中有大量孤立/不完整的报价。将访客与他们的购物车相关联的唯一方法是将报价ID存储在他们的会话中。
您可以通过长时间超时将报价ID直接存储在Cookie中来延长报价可用的时间,但这会导致明显的安全漏洞;任何人都可以调整他们的cookie中的值并查看其他人的购物车。
唯一安全的方法是继续创建一个客人令牌表并将其与引号相关联(抱歉这次没有代码,在低级别解释太多了)。令牌是唯一的公共部分,并在cookie中设置。令牌应该是随机的,长的,比如512位/ 64个字符,但不要太长,因为它们包含在每个HTTP头中。每次创建新会话时,它都可能是返回的guest虚拟机,因此请检查令牌并在表中查找。获取找到的报价ID并将其存储在会话中,从而恢复旧购物车。带有客户ID的报价不需要以这种方式获得救助,因此应该免除,特别是因为注销客户不希望看到其帐户的任何部分仍然可见。
答案 1 :(得分:9)
在“sales_flat_quote”表中查看您的magento数据库
关心boti
答案 2 :(得分:1)
购物车保存在'sales_flat_quote'表
中购物篮中的商品保存为'sales_flat_quote_item',由报价的entity_id链接
最后,项目的选项会保存到上面的item_id链接的“sales_flat_quote_item_option”
因此,要查看已保存报价的所有项目和选项
select sfqi.item_id, sfqio.code, sfqio.value from sales_flat_quote AS sfq, sales_flat_quote_item AS sfqi, sales_flat_quote_item_option AS sfqio where sfqi.item_id = sfqio.item_id AND sfqi.quote_id = sfq.entity_id AND sfq.entity_id = '133940';