以下是我页面的前几行:
我收到以下错误:
无法发送会话cookie - 已在第2行的/usr/www/users/simpleof/index.php中发送的输出(输出在/usr/www/users/simpleof/index.php:2处开始)
从我在其他论坛上看到的,这应该没问题,因为session_start()在php代码的第一个块中,但我仍然收到此错误.
以下是HTTP协议的工作原理:
您通过浏览器发送此类标题:
GET /questions/712326/why-cant-i-use-sessionstart-in-my-php-script-it-says-headers-are-already-sen HTTP/1.1 Host: stackoverflow.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; fi; rv:1.9.0.8) Gecko/2009032609 Firefox/3.0.8 (.NET CLR 3.5.30729) Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8 Accept-Language: fi-fi,fi;q=0.8,en-us;q=0.5,en;q=0.3 Accept-Encoding: gzip,deflate Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7 Keep-Alive: 300 Connection: keep-alive Referer: http://stackoverflow.com/questions/tagged/php Cookie: *censored* Cache-Control: max-age=0
第一台服务器发送标头:
HTTP/1.x 200 OK Cache-Control: private Content-Type: text/html; charset=utf-8 Content-Encoding: gzip Expires: Fri, 03 Apr 2009 02:14:49 GMT Vary: Accept-Encoding Server: Microsoft-IIS/7.0 Set-Cookie: *censored* Date: Fri, 03 Apr 2009 02:14:49 GMT Content-Length: 9346
然后服务器会向您发送实际的页面数据
Why can't I use session_start() in my php script? It says headers are already sent. - Stack Overflow ..snip..
所以你看到你不能首先发送HTML数据(DOCTYPE)然后标题数据,因为标题已经被处理.您可以使用PHP的输出控件,但更多建议您使用MVC设计来缓冲用户最后看到的所有数据.
你误读或其他论坛是错误的.仅仅因为session_start()
在PHP代码的第一个"块"中并不意味着它将起作用.
session_start()
需要在发送标头之前运行.
您的案例中的解决方案是:
将session_start();
上述...