我在 Magento CE 1.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 进行了一些搜索,并发现了一些与整个“标头已发送”相关的问题,但不是这种特定情况。
有什么想法吗?
哦,我的临时解决方法只是通过persistent/options/enable
配置数据禁用 Mage_Persistent。我还进行了一些研究,以了解是否可以观察事件以便仅为WSDL 控制器禁用此模块(因为这似乎是唯一有问题的模块),但看起来该模块依赖仅在此配置标志上确定它的启用状态。
更新:已报告错误:http ://www.magentocommerce.com/bug-tracking/issue?issue=13370