最近、プロジェクトに Magento の使用を開始し、この問題に遭遇しました。ネット上には少なくとも 10 種類以上の異なる回避策が提案されており、うまく機能する回避策を見つけるのに多くの試行錯誤が必要だったという事実に、私は苛立ちを覚えました。一部の回避策は、一部のバージョンでは機能し、他のバージョンでは機能しないようです。問題が発生する理由や方法について誰も説明していません。最も一般的な解決策は、コード ベースをハッキングするか、別の URL を使用することですが、これは必要ありません。
Community Edition 1.9.1.1 で見つけた最もクリーンな解決策は、データベース内の 2 つの構成値を編集することでした。
update core_config_data set value = NULL where path = "web/cookie/cookie_path";
update core_config_data set value = 0 where path = "web/cookie/cookie_httponly";
Cookie パスは、新規インストールでは実際にはデフォルトで NULL ですが、NULL または空の文字列である必要があります。
この動作は、Chrome を含む一部のブラウザーでlocalhostドメインでの Cookie の作成に問題があるために発生します。これは、Magento が session_start() を呼び出したときに、セッション識別子の Cookie が作成されず、その結果、ページからページへ情報を渡すことができないことを意味します。ログイン手順は実際には成功していますが、次のリクエストはそれを認識していないため、ログイン画面にリダイレクトされます。Magento はこのエッジ ケースを可能性として考慮していないため、エラーはありません。
localhost で Cookie を作成するときにドメイン値を指定しなくても、ブラウザは問題ありません。残念ながら、web/cookie/cookie_pathを NULL に設定するだけでは不十分です。これは、Magento の構成クラスがこれを空の文字列として解決するためです。これは、実際のドメインをコードで後で設定するのに十分です。
if (isset($cookieParams['domain'])) {
$cookieParams['domain'] = $cookie->getDomain();
}
このメソッドは、最終的に現在の HTTP ホストを使用して Cookie の実際のドメインを解決するため、ブラウザはそれを処理したくありません。ただし、 web/cookie/cookie_httponlyを無効にすると、Magento はこの追加の手順を実行しません。$cookieParams['domain']が設定されておらず、ドメインがセッション パラメーターとして渡されないため、セッション cookie が作成され、物事が次のように機能します。彼らはすべき。
データベース構成を変更するたびに、変更を反映させるために /var/cache/ の内容を削除する必要があることに注意してください。
私のように、コードをコメントアウトしたり、構成を変更したりしたくない場合は、上記のgetDomain()メソッドをオーバーライドし、localhost にいる場合は null を返す拡張機能を作成しました。立証し、巻き添え被害を発生させません。
http://www.mediafire.com/download/q39p4k95s5tlght/LocalCookie.zip