回答:
おそらく何もフォームキーがランダムであるので、それがために持って毎回異なるように。
そのため、違いは生じませんが、フォームキー入力をテンプレートに追加するベストプラクティスは次のとおりです。
<?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チェックアウトアクションをオーバーライドしました。
app / code / local / Name / Checkout / controllers / 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>
これがすべての人がこれを再作成するのに十分な広さになることを願っています
コメントできないので、代わりに答えています。コントローラーにフォームキーを追加しないでください。フォームキーのセキュリティ上の利点を無効にします。Varnishを使用している場合は、ESI(Edge Side Includes)を使用してキーを追加できます。これを機能させるには、Cookieに保存する必要があります。