-1

我之前搜索过,但无法解决我的问题

我的标题中包含我的会话参数。这个标题包含在我的所有页面中。除了登录页面(用户注册或登录的地方)外,效果很好:我收到了臭名昭著的Cannot send session cookie - headers already sent错误。

有没有一种方法可以disable session_start();只在登陆页面上使用而不必删除整个标题?

如果没有,我应该考虑哪些其他选择?

编辑:

这是我的头文件顶部的会话参数:

session_start();
$lifetime=5000000;
session_set_cookie_params($lifetime);

此错误不会在开发中显示。仅在生产中。

4

2 回答 2

1

session_start()在登录页面中使用应该没有任何问题。您只需要确保您的标题脚本包含在页面顶部,以便在调用session_start(). 这是因为 :

注意:要使用基于 cookie 的会话,必须在向浏览器输出任何内容之前调用 session_start()。

以上注释复制自: http: //php.net/manual/en/function.session-start.php

也许你可以这样做:检查是否已经发送了标头。如果标头已经发送,请避免调用session_start().

此页面可能会在这个方向上帮助您:如何检查标头是否已在 PHP 中发送

您仍然需要找到问题的原因并需要修复它,但暂时沿着这条线的代码应该会有所帮助:

if( ! headers_sent() )
{
    session_start();
    $lifetime=5000000;
    session_set_cookie_params($lifetime);
}
于 2013-09-27T00:01:13.570 回答
0

在进一步执行之前,您的页面中可能会有一些错误/警告发送到浏览器。要继续执行,您可以在标题页或第一个登录页中写入 ob_start。

于 2013-09-27T07:13:11.917 回答