1

MagentoCE1.6.1.0内で次のエラーが発生します

Warning: session_start() [<a href='function.session-start'>function.session-start</a>]: Cannot send session cookie - headers already sent by (output started at /home/dev/env/var/www/user/dev/wdcastaging/lib/Zend/Controller/Response/Abstract.php:586) in /home/dev/env/var/www/user/dev/wdcastaging/app/code/core/Mage/Core/Model/Session/Abstract/Varien.php on line 119

アクセスするとき/api/soap/?wsdl

どうやら、session_start()WSDLファイルの内容全体がすでに出力された後にaが試行されているため、エラーが発生しているようです。

すべてのデータを出力した後、magentoがセッションを開始しようとするのはなぜですか?よろしくお願いします。controller_front_send_response_afterしたがって、を呼び出すためにMage_Persistentにフックされているように見えますsynchronizePersistentInfo()。これにより、が起動しsession_start()ます。

興味深いことに、これは常に発生しているわけではありませんでした。最初はWSDLが正常に読み込まれ、最初は頭を悩ませて、これを引き起こすためにインストールにどのようなカスタマイズが行われたかを確認しましたが、トレースを実行しました。これはすべてコア内で完全に発生していることを示しているようです。

また、Mage_Persistentで少し(完全に無関係な)奇妙なことを経験しました。これにより、この時点でもう少し手を挙げて、それを実行することができます。

私はSOについて少し検索しましたが、一般的に「ヘッダーはすでに送信されています」というもの全体に関連するいくつかの質問を見つけましたが、この特定のケースではありません。

何かご意見は?

ああ、私が実施している一時的な回避策は、構成データを介してMage_Persistentを無効にすることpersistent/options/enableです。また、WSDLコントローラーに対してのみこのモジュールを無効にするためにイベントを監視できるかどうかについて少し掘り下げました(問題があるのはそれだけのようです)が、そのモジュールは依存しているようですこの構成フラグのみを使用して、有効なステータスを判別します。

更新:バグが報告されました:http://www.magentocommerce.com/bug-tracking/issue?issue = 13370

4

2 に答える 2

0

この回答は、既存の回答を置き換えることを意図したものではありません。しかし、誰かがこの問題に遭遇した場合に備えて、ここにいくつかのコードをドロップしたかったのですが、コメントではコードの書式設定が実際には許可されていません。

内部にあるすべての URL ルートの関数を終了するために、単純なlocalコード プール オーバーライドを使用しました。Mage_Persistent_Model_Observer_Session/api/*

この修正が非常に長寿命またはアップグレードしやすいものである必要があるとは思わない.b / c私は彼らが次のリリースかそこらでこれを修正することを期待している.

public function synchronizePersistentInfo(Varien_Event_Observer $observer)
{
    ...

    if ($request->getRouteName() == 'api') {
        return;
    }

    ...
}
于 2012-04-12T22:29:18.280 に答える