PHP头已经发送 - session_start()和setcookie()

时间:2013-09-06 19:29:52

标签: php header

function sec_session_start() {
$session_name = 'exon_id_sessfval';
$secure = false;
$httponly = true;
ini_set('session.use_only_cookies', 1);
$cookieParams = session_get_cookie_params(); 
session_set_cookie_params($cookieParams["lifetime"], $cookieParams["path"], $cookieParams["domain"], $secure, $httponly); 
session_name($session_name);
session_start();
session_regenerate_id();
}

以下代码生成一个与session_start()相关的已发送警告的警告,即使我在第一行使用ob_start()来尝试忽略该问题。

它在如下页面上调用:

<?php 
include('./inc/sessions.php');
sec_session_start();
header("Location: index.php");

有什么建议吗?当然,标题包含在逻辑运算符中以检查用户是否已登录,但它不输出任何内容。回溯到session_start()所以我认为它与仅cookie会话有关。

  

警告:session_start():无法发送会话缓存限制器 - 已在/ customers中发送的标头(在/customers/b/2/5/edited.com/httpd.www/beta/login.php:1处开始输出)第11行/b/2/5/edited.com/httpd.www/beta/inc/sessions.inc.php

     

警告:session_regenerate_id():无法重新生成会话ID -   已发送的标头   /customers/b/2/5/edited.com/httpd.www/beta/inc/sessions.inc.php on   第12行

     

警告:无法修改标头信息 - 已发送的标头   (输出始于   /comersomers/b/2/5/edited.com/httpd.www/beta/login.php:1)in   第13行/customers/b/2/5/edited.com/httpd.www/beta/login.php

3 个答案:

答案 0 :(得分:2)

你显然有一个文件上面的输出,可能在你包含的文件中。高于<?php的任何内容都被视为输出。

“Anything”可以是HTML,文本,空格,标签,BOM(byte order mark),甚至是Cookie。

答案 1 :(得分:1)

是的,我刚刚检查过。

我在Notepad +++中选择了没有BOM的编码UTF-8,它解决了这个问题。

感谢。

答案 2 :(得分:0)

ob_start();放在脚本的开头。它启用输出缓冲,因此在脚本完成之前不会打印任何内容(或者您手动刷新缓冲区)。

还要记住任何字符(包括空格,换行符和类似的东西)都被视为输出。任何PHP文件的第一个字符都必须是<?php