它不会设置会话?

时间:2010-07-27 22:39:03

标签: php session

我有这个php登录系统,我在localhost上工作得很好,我买了一个webhotel,现在它不再工作了,我找不到它出错的地方。

我没有错误。

登录页面在index.php中,当你登录时,如果一切正常(没有错误/错误的等等),那么你将被重定向到home.php。

事实并非如此。当我登录时,它只刷新index.php并在顶部输出:

警告:无法修改标题信息 - 已在第221行的httpd.www / oBz / index.php中发送(httpd.www / oBz / index.php:2)的标题

第221行

:          header(“Location:home.php”);

好的,所以我通过输入地址手动转到home.php。现在在home.php我有这个顶部:

include 'dbc.php';
page_protect();
echo "HELLO WORLD";

page_protect会检查是否有任何会话设置或cookie(请记住我),但是如果设置了某些内容,您将看到内容“HELLO WORLD”,否则您将不会。

但是现在当我进入home.php时我才收到这个:

  

警告:session_start()[function.session-start]:无法发送会话cookie - 已经在httpd.www / oBz / dbc中发送的标题(在httpd.www / oBz / dbc.php:29处开始输出)。 php在第69行   警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已在httpd.www / oBz / dbc.php上发送的标头(在httpd.www / oBz / dbc.php:29处开始输出) 69个
  警告:无法修改标题信息 - 已在第117行的httpd.www / oBz / dbc.php中发送的标题(在httpd.www / oBz / dbc.php:29处开始输出)

第69行theres session_start(),它是函数page_protect()中的第一行;

第117行theres header("Location: index.php")如果你没有登录(会话集/ cookie集),那么是否有重定向

希望我提供足够的信息,如果不只是评论你需要什么,我会尽力为你提供..

谢谢

更新

这是dbc.php:http://phpbin.net/x/999009567

** index.php您登录的位置以及会话设置http://phpbin.net/x/1564167411

的位置

**更新:  我现在解决了标题警告/错误,但这不是会话问题的解决方案!

**更新: phpbin.net/x/25857430更新的dbc.php,以前dbc.php中的所有html都在一个新文件top.php中。我在index.php中的doLogin函数部分之后包含top.php文件,因此标题不会出现任何错误..

***更新:问题出现在这里:http://phpbin.net/x/557713701这就是为什么它一直将我重定向到index.php

4 个答案:

答案 0 :(得分:4)

您正在查看错误消息的错误位。您正在查看的部分是它尝试发送标题的位置(即:它意识到出错的地方)。然而,相关部分是它开始产生产出的部分。对于第一个错误,它表示输出已经在index.php第2行开始。您可能在开始<?php标记前面有空格。我先检查一下......

答案 1 :(得分:4)

您已经将输出发送到浏览器,其中包含您在第一个PHP之前存在的所有HTML。

您需要重新排列代码,以便在将任何HTML发送到浏览器之前发生任何需要发送标头的内容。

所以:

<?php
session_start();

?>
<html>
<head>
...

最简单的答案可能是在PHP代码之后移动所有HTML。那里有一个session_regenerate_id()来电和session_start()函数中的另一个logout

就此而言,为什么这个文件中还有HTML?除了会话功能之外,我发现至少有2个header()来电。

<强>更新

if(isset($_COOKIE['user_id']) && isset($_COOKIE['user_key'])){
    /* we double check cookie expiry time against stored in database */

// I snipped a bunch of code, to point out what's going on here

  } else {
    header("Location: index.php");
    die();
    }

所以,如果cookie值不存在,你认为这里会发生什么?

答案 2 :(得分:0)

我猜:

你发了

吗?
die();

header("Location: home.php");之后

???

您可能忘记关闭输出,以便打印出页面的其余部分,无论此重定向如何。

另外,请确认编码好,应该是UTF-8吗?有时我自己弄错了:(

好的,更新回答:

266 header("Location: index.php");

303 header("Location: home.php");

340 header("Location: home.php");

在这三行之后你没有发出Die()。所以这可能是一种风险:)

答案 3 :(得分:0)

dbc.php的第29行正在回显,打印或生成一些输出到浏览器....那么dbc.php中的代码是什么?#/ p>

同样是index.php的第2行