Magento添加到购物车问题缓存新产品

Fra*_*sco 4 cron caching product magento

我在主页的新产品小部件中添加到购物车功能有问题.通过点击"添加到购物车"它加载/结帐/购物车/页面,但我收到"购物车是空的!".我检查了JS问题,但我没有任何错误,也在系统日志中.在缓存管理中,如果我只禁用BLOCK_HTML缓存,它可以正常工作; 如果我重新启用它我有问题

该网站由siteground托管,实际上我在cron中:每25分钟:php /home/ledsuper/public_html/cron.php>/dev/null每30分钟:/ bin/sh/home/ledsuper/public_html/cron.sh

是什么导致了这个问题?怎么办才能解决?谢谢

jos*_*va1 8

这个问题似乎是Cache正在存储"新产品"块,其中包含带有"添加到购物车"链接的新产品,其中包含旧的(不正确的)表单密钥

什么是表格密钥

这是一种防止XSS攻击的机制,恶意攻击者可以在您使用其他浏览器选项卡时为您的购物车添加内容,甚至可以为您完成订单.这取决于可预测的URL,因为该站点无法访问您的Magento订单等待的浏览器选项卡中的实际HTML内容.然而,发送到Magento商店的所有内容都会提交您的Cookie,从而使用您的会话.通过向每个表单或在服务器上生成操作的每个链接添加唯一键,URL或表单内容将变得不再可预测.表单密钥存储在会话数据中,并在提交给服务器时进行验证.如果它们不匹配 - 您会收到表单键错误并且操作未完成.

问题在这里

这是在新产品小部件中在Magento 1.8中实现的添加到购物车的方式将生成表单键错误,因为它将缓存新产品列表以及"添加到购物车"链接,其中包含表单键首先请求页面的用户.

当您不使用缓存时,为什么不会出现此问题

生成块时,product/widget/new/content/new_grid.phtml使用$this->getAddToCartUrl定义的方法创建添加到购物车链接 ,code/core/Mage/Catalog/Block/Product/Abstract.php其中将form_key添加到URL.

提出的解决方案

我能想到3种选择

  1. 简单的一点是将窗口小部件缓存生存期设置为1,因此它根本不会缓存它.(确保在此更改后刷新所有缓存.)执行此操作的(大)缺点是,对于每个页面加载,都会通过加载集合来重新呈现块.
  2. 仅为添加到购物车按钮创建子块,该按钮根本不缓存.
  3. 通过编辑product/widget/new/content/new_grid.phtml和替换"添加到购物车"按钮更改链接,并将href替换为产品页面,这样您就可以将用户重定向到产品页面,而不是将产品添加到购物车中.如果您对工作流程没有问题,这可能是最简单的.


Sli*_*yyy 5

最好让Magento的"阻止HTML输出"缓存启用,以提高网站性能.您可以在新产品块上添加"cache_lifetime"节点,并将其设置为允许的最小值(1秒).最后,您的块代码应如下所示:

{{block type="catalog/product_new" name="home.catalog.product.new" alias="product_homepage" template="catalog/product/new.phtml" _productsCount="8" cache_lifetime="1"}}
Run Code Online (Sandbox Code Playgroud)

这将有效地保持新产品块不缓存,同时安全地保持所有其他HTML块元素像往常一样缓存,因此添加到购物车缓存新产品将不会有任何问题.