Cannot send session cookie - headers already sent by;vendor/workerman/workerman/Worker.php:1385

gobyang

因为我的application里面有http应用和tcp应用,然后这个文件的vendor/workerman/workerman/Worker.php:1385,里面调用safeEcho的时候报这个错误了,因为Http协议里面有init的时候有调用session_start方法,试了各种方法,注释两个文件的啊 都不行。

请各位指教

阅读 1932
3个回答

walkor

业务里不要使用php自带的session cookie方法,php cli不支持原生session cookie接口。

Workerman\Protocols\Http::header
Workerman\Protocols\Http::setcookie
等方法。

http://doc.workerman.net/315182

  • 暂无评论
gobyang

嗯嗯 都是没有用原生的 谢谢啊,我看错误日志的时候,我发现是先报的去读取主进程id的时候( Get master process PID),报那个主进程PID的文件找不到的错误,然后接着报了这个session的错误!

但是我打开PID文件的路径(/home/wwwroot/demo.api.cn/vendor/workerman/workerman/../_home_wwwroot_demo.api.cn_service_start.php.pid)是可以找到的啊,但是文件的所属是root且可读可写,但是其他用户都有读的权限。而且我应用启动起来的都是root,很纳闷啊。

下面是具体的错误日志。

file_get_contents(/home/wwwroot/demo.api.cn/vendor/workerman/workerman/../_home_wwwroot_demo.api.cn_service_start.php.pid): failed to open stream: No such file or directory

session_start(): Cannot send session cookie - headers already sent by (output started at /home/wwwroot/demo.api.cn/service/start.php:107)

session_start(): Cannot send session cache limiter - headers already sent (output started at /home/wwwroot/demo.api.cn/service/start.php:107)

希望老大能够答疑解惑下。

谢谢

  • 暂无评论
walkor

启动时这个文件是不存在的,启动后会存储这个文件。

这些报错是已知可预见的错误,并且代码里都用 @ 做了抑制,正常情况下不会报出来,可能是你的php环境有特殊设置,导致用 @ 抑制的错误报了出来。

  • 暂无评论