Php 它不会设置会话吗?

Php 它不会设置会话吗?,php,session,Php,Session,我有一个php登录系统,我在localhost上运行得很好,我买了一个webhotel,现在它不再工作了,我找不到哪里出了问题 我没有错误 登录页面在index.php中,当您登录时,如果一切正常,没有错误,那么您将被重定向到home.php 事实并非如此。当我登录时,它只刷新index.php并在顶部输出: include 'dbc.php'; page_protect(); echo "HELLO WORLD"; 警告:无法修改标题信息-标题已由httpd.www/oBz/index.ph

我有一个php登录系统,我在localhost上运行得很好,我买了一个webhotel,现在它不再工作了,我找不到哪里出了问题

我没有错误

登录页面在index.php中,当您登录时,如果一切正常,没有错误,那么您将被重定向到home.php

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

include 'dbc.php';
page_protect();
echo "HELLO WORLD";
警告:无法修改标题信息-标题已由httpd.www/oBz/index.php:2在httpd.www/oBz/index.php的第221行发送

第221行有: headerLocation:home.php

好的,我通过输入地址手动转到home.php。现在在home.php中,我在顶部有以下内容:

include 'dbc.php';
page_protect();
echo "HELLO WORLD";
page_protect检查是否设置了任何会话或CookiierMember me,但如果设置了某些内容,您将看到HELLO WORLD的内容,否则您将看不到

但现在当我进入home.php时,我只收到以下信息:

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

第69行有session\u start,它是功能页面的第一行\u protect

第117行有headerLocation:index.php,如果您没有登录到会话集/cookie集,则可以重定向

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

多谢各位

更新:

下面是dbc.php:

**index.php,用于登录和设置会话的位置

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

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


***更新:问题就在这里:这就是为什么它总是将我重定向到index.php的原因

您看到的错误消息是错误的。您看到的部分是它试图发送标题的地方,即:它意识到某些地方出错。然而,相关部分是它开始产生产出的部分。对于第一个错误,它说输出已经在index.php的第2行启动。你的开场白前面可能有空格我猜:

你发行了吗

die();
headerLocation之后:home.php

您可能只是忘记关闭输出,以便它打印出页面的其余部分,而不考虑此重定向

另外,请确认编码是否正确,是否应为UTF-8?有时我自己也会弄错:

好,最新答复:

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

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

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

在这三行之后你没有死。所以这可能是一个风险:

dbc.php的第29行正在回音、打印或生成一些输出到浏览器。。。。那么dbc.php中关于这一行的代码是什么


同样地,index.php的第2行

您已经向浏览器发送了输出,其中包含了第一段php之前存在的所有HTML

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

因此:


那么,如果cookie值不存在,您认为这里会发生什么?

请检查我上传的dbc.php。不,我在@Karem前面没有空格,它可能在?>标记后面。为什么你不能自己检查第29行?在标记之前有输出。必须在任何输出之前调用会话\u start。我猜它在本地主机服务器上工作的原因可能是您打开了输出缓冲。一个简单的函数应该可以解决这个问题,当然也可以将它从该函数中删除。@premiso我刚刚检查了我的wampserver设置,我确实打开了输出缓冲,所以你可能是对的。我在dbc.php的顶部设置了session_start,并删除了任何其他session_start;在文件中,但问题仍然存在,因为它无法登录..@karem$\u会话['HTTP\u USER\u AGENT']!=md5$\u服务器['HTTP\u用户\u代理']在哪里设置$\u会话['HTTP\u用户\u代理']?我使用exit;我试着去死;我仍然有标题错误,但我刚刚发现这不是会话问题;现在,还是什么都没有:我按照你说的做了,重新排列了代码,将所有html移到了另一个文件top.php中,所以我把它称为html文件,这清除了警告,但没有修复解决方案。@karem有很多原因可以解释为什么它可能重定向到索引。
php。查找每个headerLocation:index.php;在此之前调用并调试代码。例如,可能cookies没有被正确发送或设置。@George Marian cookies没有被设置,如果您没有选中“记住”,但我认为您没有。我有两个header location index.php,一个内部注销函数,一个是cookie或会话set@George如果你看到上面这条线,你会发现:如果!isset$\会话['user\u id']&&!isset$\u SESSION['user\u name']{因此,如果会话未启动,则您在更新的答案中发布的代码将启动setted@karem只有当cookies设置好时。
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();
    }