-1

RE:EE v1.10.1.1

こんにちは、

最近、ユーザーがフォームを送信してアカウントを作成した後、登録プロセス ページがフリーズすることを発見しました。「/customer/account/createpost/」で停止します。

行 #325 (

$session->setCustomerAsLoggedIn($customer);
)。

ユーザーをログイン済みとして設定しようとすると、無効な/空のセッションで詰まるようです。フリーズしたページを更新した後にのみ、エラーがログに記録/表示されます。ログに記録されている他のエラー/警告/メッセージは見つかりませんでした...ログのいずれにも(サーバーログを含めるため):


a:5:{i:0;s:62:"Mage registry key "_singleton/customer/session" already exists";i:1;s:1247:"#0 /server_path/html/app/Mage.php(192): Mage::throwException('Mage registry k...')
#1 /server_path/html/app/Mage.php(446): Mage::register('_singleton/cust...', Object(Mage_Customer_Model_Session))
#2 /server_path/html/app/code/core/Mage/Customer/controllers/AccountController.php(50): Mage::getSingleton('customer/sessio...')
#3 /server_path/html/app/code/core/Mage/Customer/controllers/AccountController.php(75): Mage_Customer_AccountController->_getSession()
#4 /server_path/html/app/code/core/Mage/Core/Controller/Varien/Action.php(409): Mage_Customer_AccountController->preDispatch()
#5 /server_path/html/app/code/core/Mage/Core/Controller/Varien/Router/Standard.php(253): Mage_Core_Controller_Varien_Action->dispatch('create')
#6 /server_path/html/app/code/core/Mage/Core/Controller/Varien/Front.php(176): Mage_Core_Controller_Varien_Router_Standard->match(Object(Mage_Core_Controller_Request_Http))
#7 /server_path/html/app/code/core/Mage/Core/Model/App.php(340): Mage_Core_Controller_Varien_Front->dispatch()
#8 /server_path/html/app/Mage.php(627): Mage_Core_Model_App->run(Array)
#9 /server_path/html/index.php(95): Mage::run('', 'store')
#10 {main}";s:3:"url";s:25:"/customer/account/create/";s:11:"script_name";s:10:"/index.php";s:4:"skin";s:2:"sg";}

次の行 (#326) はウェルカム メールを送信します。行番号 325 がコメントアウトされている場合でも、メールは送信されます。これが行われた場合、アカウントへの最初のログイン試行は、行番号 137 の「/customer/account/loginPost/」でチョークします。

$session->login($login['username'], $login['password']);

ページを 1 回更新すると、ダッシュボードが表示されます。

いずれにせよ、アカウントは適切に作成されたように見え、その後、アカウントの機能は正常であり、その他のログインの問題はありません。

最近いくつかの変更がありましたが、顧客および/または顧客/セッションとは何の関係もないはずです...少なくとも私が認識していることはありません。

偶然にも、コード内の一般的な潜在的な magento の落とし穴について誰かが考えを持っていますか?別のスクリプト/mod で間接的に何かを実行して、このようなことを引き起こす可能性がある場所はありますか?

私はこの方法を必要以上に長く行ってきましたが、リードや成功なしに出発点に戻ったと感じています. 明らかな何かが欠けている/見落としているような気がします。ご意見、ご感想、ご提案、アイデアをお待ちしております。

ありがとう。

敬具、JamesD

[b]注:[/b] 私がこの機能を最後にチェックしたのは 1 ~ 2 か月前で、この機能は実行されていませんでした。それ以来、いくつかのカスタム MOD を作成/追加しましたが、顧客や顧客セッションに「直接」接続するべきではありません。

また、1 年以上前に「customer_login」イベントと「customer_before_save」イベントにいくつかの追加を行いましたが、過去に問題が発生していないため、これらのいずれかが原因ではないと思います。他の唯一の変更点は、EE 1.9 から 1.10 への Magento のアップグレードです。

空のセッションの例....

ページがチョークしたときのセッションは次のようになります。

Mage_Customer_Model_Session Object
    (
        [_customer:protected] => 
        [_isCustomerIdChecked:protected] => 
        [_skipSessionIdFlag:protected] => 
        [_data:protected] => Array
            (
                [_session_validator_data] => Array
                    (
                        [remote_addr] => 155.77.22.255
                        [http_via] => 
                        [http_x_forwarded_for] => 
                        [http_user_agent] => Mozilla/5.0 (Windows NT 6.0) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11
                    )

                [session_hosts] => Array
                    (
                        [www.slimgenics.com] => 1
                    )

                [id] => 
                [messages] => Mage_Core_Model_Message_Collection Object
                    (
                        [_messages:protected] => Array
                            (
                            )

                        [_lastAddedMessage:protected] => Mage_Core_Model_Message_Success Object
                            (
                                [_type:protected] => success
                                [_code:protected] => Thank you for registering.
                                [_class:protected] => 
                                [_method:protected] => 
                                [_identifier:protected] => 
                                [_isSticky:protected] => 
                            )

                    )

                [before_auth_url] => https://www.domain.com/customer/account/index/
                [no_referer] => 1
            )

        [_hasDataChanges:protected] => 1
        [_origData:protected] => 
        [_idFieldName:protected] => 
        [_isDeleted:protected] =>
4

2 に答える 2

1

あなたが説明するエラーはここで発生するはずです(参照用のmagento CE 1.7.0.2):

// app/Mage.php:472
$registryKey = '_singleton/'.$modelClass;
if (!self::registry($registryKey)) {
    self::register($registryKey, self::getModel($modelClass, $arguments));
}

したがって、このキーが存在するかどうかは、登録の直前にチェックされます。EEコードは他のことをしているとは思いません。したがって、あなたが答えなければならない質問は次のとおりです!self::registry($registryKey) false

あなたは私が深く掘り下げた幸運を持っています。Session-Object の作成に失敗し、false を返すと思います。これは、キーのチェックが true であることを意味しますが、次のMage::register()ようにチェックするため、チェックインは失敗しますisset()

// app/Mage.php:216
public static function register($key, $value, $graceful = false)
{
    if (isset(self::$_registry[$key])) {
        if ($graceful) {
            return;
        }
        self::throwException('Mage registry key "'.$key.'" already exists');
        // [...]

問題は、セッション オブジェクトの作成に失敗する理由です。

于 2012-12-30T08:39:45.060 に答える
0

問題は解決しました。

この問題は、私が気付いていなかったファイルの変更に起因していました。その変更により、明らかに「再宣言できません」というメッセージをスローするループ (ループが停止していた場所) が発生しました。複数回呼び出されたファイル内の 'require' ステートメントが原因でした。

これを見つけた唯一の方法は、カスタム API からでした。これを使用してアカウント作成機能をテストしたところ、幸いなことに、Soap ハンドラーがエラーをスローして Magento error.log に記録することができました (これは以前にはありませんでした)。その「再宣言」エラーメッセージがそこにあり、変更されたファイルに私を導きました。

ご意見をお寄せいただきありがとうございます。

于 2013-02-19T17:23:13.000 に答える