禁用session_start();仅在登陆页面上?

时间:2013-09-26 23:50:02

标签: php session session-variables

我之前搜索过但是无法修复我的问题

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

我是否可以在目标网页上使用disable session_start();而无需移除整个标头?

如果没有,我应该研究哪些其他选择?

编辑:

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

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

此错误未在开发中显示。仅限于制作。

2 个答案:

答案 0 :(得分:1)

在着陆页中使用session_start()时不会有任何问题。您只需要确保页面顶部包含您的标题脚本,以便在调用session_start()之前不会将任何其他内容发送到浏览器。这是因为:

  

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

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

可以这样做:检查标头是否已经发送。如果已发送标头,请拨打session_start()

此页面可能会帮助您朝这个方向发展:How to check if Headers already been sent in PHP

你仍然需要找到问题的原因,并且需要修复它,但是暂时的代码应该有所帮助:

if( ! headers_sent() )
{
    session_start();
    $lifetime=5000000;
    session_set_cookie_params($lifetime);
}

答案 1 :(得分:0)

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