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を運なしでクリアしました

回答:


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.phpようapp/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のapp / code / local / Mage / Core /でMagento 1.9.2.4を実行していたため、私の管理者ログインはPOSTで中断します。
BENN1TH 2017

1

以下の関数をサードパーティ/カスタムモジュールに追加します。そうでない場合は、関数を適切に実装/拡張してください。

/**
* 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 system->一般-> web->セッション検証設定で

「Validate HTTP_X_FORWARDED_FOR」を「no」に、「Validate HTTP_USER_AGENT」を「yes」に変更しました。Cookieドメインが「yourdomain.com」のように正しく設定されていることを確認してください

これを行ったら、パッチを再適用してログインできます。これが問題の解決に役立つことを願っています。不適切なセッションパラメータがフォームキーの問題の原因となるようです。

テストする前に、ブラウザのCookieを必ずクリアしてください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.