0
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/b/2/5/edited.com/httpd.www/beta/login.php:1)在 /customers/b/ 2/5/edited.com/httpd.www/beta/inc/sessions.inc.php 第 11 行

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

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

4

3 回答 3

2

您显然在您的一个文件上方有输出,并且可能在您包含的文件之一中。以上任何内容<?php都被视为输出。

“任何东西”可以是 HTML、文本、空格、制表符、BOM(字节顺序标记),甚至是 cookie。

于 2013-09-06T19:35:01.463 回答
1

是的,我刚查过。

我在 Notepad++ 中选择了 Encoding UTF-8 without BOM,它解决了这个问题。

谢谢。

于 2013-09-06T19:33:49.307 回答
0

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

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

于 2013-09-06T19:34:02.220 回答