我有一个页面列出了产品,仅此而已。它的catalog/view.phtml
克隆。只是包括在内app/Mage.php
。
在此页面中,我使用
Mage::getSingleton('core/session')->getFormKey();
但这与其他页面的formKey不同
我究竟做错了什么?
我有一个页面列出了产品,仅此而已。它的catalog/view.phtml
克隆。只是包括在内app/Mage.php
。
在此页面中,我使用
Mage::getSingleton('core/session')->getFormKey();
但这与其他页面的formKey不同
我究竟做错了什么?
Answers:
可能没什么,因为形式的关键是随机的,所以它具有每次都不同。
因此,这没有什么区别,但是最佳实践是如何将表单键输入添加到模板中,它是:
<?php echo $this->getBlockHtml('formkey') ?>
更新:我必须承认,我在某一点上是错的:在一个会话中,表单键保持不变。如果您在不同页面上具有不同的表单键,则这可能是第三方全页缓存(在缓存中包含表单键)(它不应包含)的问题,或者该表单键位于正在使用块的自定义块中缓存。对于后者,我找到了一个解决方案:包含form_key(即动态内容)的缓存块
getBlockHtml()
在被实现Mage_Core_Block_Abstract
和formkey
块在定义base/default/layout/core.xml
<input type="hidden" name="form_key" value="<?php echo Mage::getSingleton('core/session')->getFormKey(); ?>"/>
进行了硬编码。似乎要对其进行修复,但仍然令人沮丧。有没有更好的办法。
我知道这个模糊的问题不应该回答。但是我可能在这里遇到了类似的问题,这是我所学到的:
因此,基于简短的示例,我在新模块中重写了addtocart checkout操作,如下所示:
应用程序/代码/本地/名称/结帐/控制器/CartController.php
<?php
require_once(Mage::getModuleDir('controllers','Mage_Checkout').DS.'CartController.php');
class Name_Checkout_CartController extends Mage_Checkout_CartController
{
public function addAction()
{
$request = $this->getRequest();
$formKey = Mage::getSingleton('core/session')->getFormKey();
$request->setParam('form_key', $formKey);
return parent::addAction();
}
}
app / code / local / Name / Checkout / etc / config.xml
<?xml version="1.0"?>
<config>
<modules>
<Name_Checkout>
<version>0.1.0</version>
</Name_Checkout>
</modules>
<frontend>
<routers>
<checkout>
<args>
<modules>
<name_checkout before="Mage_Checkout">Name_Checkout</name_checkout>
</modules>
</args>
</checkout>>
</routers>
</frontend>
</config>
app / etc / modules / Name_Checkout.xml
<?xml version="1.0"?>
<config>
<modules>
<Name_Checkout>
<active>true</active>
<codePool>local</codePool>
<depends>
<Mage_Checkout/>
</depends>
</Name_Checkout>
</modules>
</config>
我希望这将足以使所有人重新创建它
无法发表评论,因此我正在回答。不要在控制器中添加表单键。它禁用了表单密钥的安全性。如果您使用的是清漆,则可以使用ESI(边缘包括)来添加密钥。您必须将其保存在Cookie中才能正常工作。