不安定なCookie関連のログインの問題
これは長いです... 間違ったCookie管理が原因でログインが失敗するという悪いケースがあります。まず、私は顧客がカタログを表示する前にログインする必要があるクローズドストア(B2B)を管理しています。未登録のアクセスはすべてログインページにリダイレクトされますが、ユーザー名とパスワードが正しい場合でも、顧客がログインできないことがあります。Diglin_Username拡張機能とStoreRestricitionプラグインを使用して目的の動作を実現するため、「ユーザー名」と言います。ときどき、Magentoが残した2つの異なるCookieのセットが見つかり、それらが2つの異なるドメイン(たとえば、.www.abc.comと.abc.com)を参照していることがあります。 初期のセッションのインスタンス化に関する偉大なAlan Stormからのこの記事を読んだ後、私のブラウザーで恐ろしいPHPSESSID Cookieを見つけた後、問題を詳細に調査しました。 私が見つけたのは両面です。まず、Mage_Core_Model_Session_Abstract_Varienクラスの関数start()にMage :: Log()呼び出しを入れて、Magentoが新しいセッションを開始するために行ったさまざまな試行をログに記録し、最初のMage :: run()の呼び出しに続いてpreDispatch()を呼び出したことに気付きました、Mage_Core_Controller_Front_Actionクラスのdispatch()およびpostDispatch()メソッドは通常のシーケンスで呼び出されますが、postDispatch()を実行すると、preDispatch()によって開始されたセッションを見つけられず、新しいセッションの作成に進むようです。この点で、Magento 1.7.xと1.8.xのバージョンのコードに違いがあり、問題を解決できる可能性があると思います。 Magento 1.7.x-Mage_Core_Model_Session_Abstract_Varienクラス: public function start($sessionName=null) { if (isset($_SESSION)) { return $this; } . . } Magento 1.8.x-Mage_Core_Model_Session_Abstract_Varienクラス: public function start($sessionName=null) { if (isset($_SESSION) && !$this->getSkipEmptySessionCheck()) { return $this; } . . } SkipEmptySessionCheckプロパティを設定する場所が見つからないので、Mage_Core_Controller_Front_Actionクラスに次のようにパッチを適用しました。 public function postDispatch() { parent::postDispatch(); if …