Magento 1.9.2.1 SUPEE-7405管理员无法正常工作


8

我今天从该站点通过FTP安装了新补丁-SUPEE-7405。

https://magentary.com/kb/install-supee-7405-without-ssh/

现在,看来我的前端存储仍在工作,但是当我尝试登录/ admin时,它会将我带到登录名/密码页面...登录后,我得到一个错误。

Invalid method Mage_Core_Model_Session::validateFormKey(Array
(
    [0] => y6h9TjgvchV8hCZT
)
)

Trace:
#0 /home/a0cegcom/public_html/app/code/core/Mage/Admin/Model/Observer.php(73): Varien_Object->__call('validateFormKey', Array)
#1 /home/a0cegcom/public_html/app/code/core/Mage/Admin/Model/Observer.php(73): Mage_Core_Model_Session->validateFormKey('y6h9TjgvchV8hCZ...')
#2 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(1357): Mage_Admin_Model_Observer->actionPreDispatchAdmin(Object(Varien_Event_Observer))
#3 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(1336): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Admin_Model_Observer), 'actionPreDispat...', Object(Varien_Event_Observer))
#4 /home/a0cegcom/public_html/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('controller_acti...', Array)
#5 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(527): Mage::dispatchEvent('controller_acti...', Array)
#6 /home/a0cegcom/public_html/app/code/core/Mage/Adminhtml/Controller/Action.php(160): Mage_Core_Controller_Varien_Action->preDispatch()
#7 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Action.php(407): Mage_Adminhtml_Controller_Action->preDispatch()
#8 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(254): Mage_Core_Controller_Varien_Action->dispatch('index')
#9 /home/a0cegcom/public_html/app/code/core/Mage/Core/Controller/Varien/Front.php(172): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#10 /home/a0cegcom/public_html/app/code/core/Mage/Core/Model/App.php(365): Mage_Core_Controller_Varien_Front->dispatch()
#11 /home/a0cegcom/public_html/app/Mage.php(684): Mage_Core_Model_App->run(Array)
#12 /home/a0cegcom/public_html/index.php(88): Mage::run('', 'store')
#13 {main}

有任何想法吗?我已经清除了我的var / cache和var / session,但是没有运气

Answers:


11

在我看来,该补丁未正确安装。

validateFormKey功能包含在补丁中。

  • 打开app/code/core/Mage/Core/Model/Session.php文件并再次检查该validateFormKey功能是否在此处
  • 如果在中覆盖了文件,则app/code/local/Mage/Core/Model/Session.php必须添加新方法validateFormKeyrenewFormKey手动在覆盖的文件中添加。同样将第60行更改为:

    $this->setData('_form_key', Mage::helper('core')->getRandomString(16));

    $this->renewFormKey();
  • 如果在这里,那肯定是一个缓存/编译问题。刷新您的缓存以及任何其他缓存(清漆/ APC等...)

  • 如果您启用了编译功能,请先禁用编译功能,然后重新编译。
  • 如果此功能不在此处,则表示文件未正确上传。请注意,从Magentary提取存档时,文件将提取到SUPEE-7405-1.9.2.1文件夹中,您必须打开此文件夹并将文件从此文件夹提取到您的Magento根目录,从而传输整个SUPEE-7405- 1.9.2.1文件夹将不应用补丁。

7

Nexcess_Turpentine模块将覆盖app/code/core/Mage/Core/Model/Session.phpapp/code/local/Mage/Core/Model/Session.php。我们只是碰到了这一点。这很可能是您的问题。为了安抚此修补程序而不花太多时间,我认为最合适的解决方案是将修补程序更改添加到本地替代文件中。我相信,Turpentine会覆盖该文件,因为对于他们需要涵盖的特定情况,重写不起作用。我认为这不能转换为重写。

这是需要应用的补丁更改:

--- a/app/code/core/Mage/Core/Model/Session.php
+++ b/app/code/core/Mage/Core/Model/Session.php
@@ -36,7 +36,7 @@
  */
 class Mage_Core_Model_Session extends Mage_Core_Model_Session_Abstract
 {
-    public function __construct($data=array())
+    public function __construct($data = array())
     {
         $name = isset($data['name']) ? $data['name'] : null;
         $this->init('core', $name);
@@ -50,8 +50,27 @@ class Mage_Core_Model_Session extends Mage_Core_Model_Session_Abstract
     public function getFormKey()
     {
         if (!$this->getData('_form_key')) {
-            $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
+            $this->renewFormKey();
         }
         return $this->getData('_form_key');
     }
+
+    /**
+     * Creates new Form key
+     */
+    public function renewFormKey()
+    {
+        $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
+    }
+
+    /**
+     * Validates Form key
+     *
+     * @param string|null $formKey
+     * @return bool
+     */
+    public function validateFormKey($formKey)
+    {
+        return ($formKey === $this->getFormKey());
+    }
}

3

我的站点Session.phpapp/code/local/Mage/Core/Model/目录中具有该文件的清漆/松节油修改版本。

现在,使该文件中的适当功能看起来如下所示,并且所有内容应再次运行。

public function getFormKey()
{
    if (Mage::registry('replace_form_key') &&
            !Mage::app()->getRequest()->getParam('form_key', false)) {
        // flag request for ESI processing
        Mage::register('turpentine_esi_flag', true, true);
        return '{{form_key_esi_placeholder}}';
    } else {
        return $this->real_getFormKey();
    }
}

public function real_getFormKey()
{
    if (!$this->getData('_form_key')) {
        //$this->setData('_form_key', Mage::helper('core')->getRandomString(16));
        $this->renewFormKey();
    }
    return $this->getData('_form_key');
}

public function renewFormKey()
{
    $this->setData('_form_key', Mage::helper('core')->getRandomString(16));
}

public function validateFormKey($formKey)
{
    return ($formKey === $this->getFormKey());
}

2

还要确保您没有app/code/core/Mage/Core/Model/Session.php直接修改,而是将文件复制到app/code/local/Mage/Core/Model/Session.php并进行了适当的修改。

(Magento将local在使用路径之前检查目录core路径。


我忘了并且本质上是Magento 1.9.2.4在本地的早期magento版本中以app / code / local / Mage / Core /运行,因此我的管理员登录会在POST上中断。
BENN1TH

1

将以下功能添加到3rd Party / Custom Module中。如果未正确实现/扩展功能。

/**
* Creates new Form key
*/
public function renewFormKey()
{
$this->setData('_form_key', Mage::helper('core')->getRandomString(16));
}

/**
* Validates Form key
*
* @param string|null $formKey
* @return bool
*/
public function validateFormKey($formKey)
{
return ($formKey === $this->getFormKey());
}
}

谢谢!


0

我遇到了同样的错误,对我来说,我不得不回滚补丁(在.sh文件后使用-R,但是不知道如何通过PHP进行操作)

然后在Magento goto系统中->常规->网络->会话验证设置

我将“验证HTTP_X_FORWARDED_FOR”更改为“否”,并将“验证HTTP_USER_AGENT”更改为“是”。确保您的Cookie域也正确设置为“ yourdomain.com”

完成此操作后,请重新应用补丁程序并可以登录。希望这可以帮助您解决它-似乎任何不正确的会话参数都会导致表单密钥问题。

确保在测试之前也清除浏览器cookie

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.