답변:
이 때문에 아마 아무것도 형태의 키는 임의 없기 때문에 이 때마다 다를 수 있습니다.
따라서 차이가 없어야하지만 템플릿에 양식 키 입력을 추가하는 방법은 다음과 같습니다.
<?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>
나는 이것이 모두가 이것을 재현하기에 충분할 수 있기를 바랍니다.
댓글을 달 수 없으므로 대신 대답하고 있습니다. 컨트롤러에 폼 키를 추가하지 마십시오. 폼 키의 보안 이점을 비활성화합니다. 광택을 사용하는 경우 ESI (Edge Side Includes)를 사용하여 키를 추가 할 수 있습니다. 쿠키가 작동하려면 쿠키에 저장해야합니다.