有时,我们完成的网页浏览时发生“Warning: session_start(): Cannot send session cookie - headers already sent by (output started at…”的错误。一般的原因是在运行session_start()时,之前已经有实际的html内容输出了,只要将session_start ()的调用移到网页开头部分就能解决。

但是,在Dreamweaver设计中,产生这一问题往往不是上述原因,DW自动产生的代码不会犯如此低级的错误。通常是由于文件UTF-8格式转换或使用网上下载的网页、模板时,文件开始处被插入BOM(Byte Order Mark,字节序标记),正是这个BOM影响到了session的正常运行。

解决的办法也很简单,只要用Ultraedit打开文件,执行另存为,保存时选择“UTF-8 无BOM”即可。如问题依旧,检查session_start函数前的不同PHP代码块之间是否有空行,一般将空行删除即可。

<?php require_once(’Connections/conn.php‘); ?>
(空行删除)
<?php
if (!isset($_SESSION)) {
  session_start();
}
…

另外,header转发也有可能产生此类问题,比如:header(sprintf(”Location:%s”,$insertGoTo)),也可以用以上方法解决。