【发布时间】:2012-04-05 18:34:23
【问题描述】:
我在 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时
显然,在已经输出 WSDL 文件的全部内容之后,正在尝试 session_start(),从而导致错误。
为什么 magento 会在输出所有数据后尝试启动会话?我很高兴你问。所以看起来 controller_front_send_response_after 被 Mage_Persistent 钩住以调用 synchronizePersistentInfo(),这反过来又导致 session_start() 被触发。
有趣的是,这并不总是发生,最初加载的 WSDL 对我来说还不错,最初我绞尽脑汁想看看我们的安装可能进行了哪些自定义导致这个,但我所做的跟踪似乎表明这一切都发生在核心内部。
我们也经历了一点点(完全不相关的)对 Mage_Persistent 的陌生感,这让我在这一点上更愿意举起手来。
我在 SO 上进行了一些搜索,发现了一些与整个“标头已发送”相关的问题,但不是这种特定情况。
有什么想法吗?
哦,我的临时解决方法是通过 persistent/options/enable 配置数据禁用 Mage_Persistent。我还进行了一些研究,以了解是否可以观察一个事件以便为 WSDL 控制器禁用此模块only(因为这似乎是唯一有问题的模块),但看起来该模块完全依赖此配置标志来确定它的启用状态。
更新:已报告错误:http://www.magentocommerce.com/bug-tracking/issue?issue=13370
【问题讨论】:
-
Magento 版本? Mage_Persistant 是一个相对较新的功能,如果它漏掉了我也不会感到惊讶。
-
嘿艾伦,是的,好问题 - ME 1.11.0