我有这个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
答案 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行