php 无法发送会话cookie -标头已发送[重复]

v1uwarro  于 2023-10-15  发布在  PHP
关注(0)|答案(5)|浏览(125)

此问题已在此处有答案

How to fix "Headers already sent" error in PHP(16个回答)
6天前关闭
下面是我的PHP代码的一个简单的例子(我希望如此)是自我解释。我尝试做的是更新会话变量。但是脚本的输出如下:
警告:session_start()[function.session-start]:Cannot send session cookie -header already sent by(output started at /Library/WebServer/Documents/facebook/test.php:8)in/Library/WebServer/Documents/facebook/test. php on line 11
当然,警告是由第8行和第9行中的echo语句引起的。有没有简单的方法来阻止这个警告?

<?php
session_start();
$_SESSION['percent'] = 0;
$iterations = 50;
    
for ($i = 0; $i <= iterations; $i++) {
  $percent = ($i / $iterations) * 100;
  echo "Hello World!";
  echo "<br />";
  // update session variable
  session_start();
  $_SESSION['percent'] = number_format($percent, 0, '', '');
  session_commit();
}
?>
oaxa6hgo

oaxa6hgo1#

从for循环中删除session_start()。
将session_commit()放在for循环的最后。
这两个函数在一个脚本中只能调用一次。

p3rjfoxz

p3rjfoxz2#

在输出开始后,不可能设置cookie(或发送任何其他标头)。您可以在第1行添加ob_start()来缓冲输出。
正确的解决方案是将逻辑与输出分离。检查例如。http://www.paragoncorporation.com/ArticleDetail.aspx?ArticleID=21

nuypyhwy

nuypyhwy3#

如果在session-start()语句之前没有任何previeus输出,则尝试将.php文件重新保存为ansi文件或不带BOM文件的utf-8。在某些情况下,编辑器本身会将内容作为输出写入文件。
它对我起作用

1rhkuytd

1rhkuytd4#

session_start()函数只需要执行一次。所以只要把循环中的一个去掉。
你也不需要手动做session_commit(),在大多数情况下,PHP会自动为你处理。

g2ieeal7

g2ieeal75#

正如其他人所说,错误的原因是您正在使用的第二个session_start()。然而,它抛出错误的实际原因是因为您试图在发送输出后设置头。由于session_start()函数设置了会话cookie,它试图设置cookie头,这是在你已经回显内容之后。

相关问题