php 不支持强制标头,关于会话:警告:无法修改标头信息-标头已发送(PHP)

本问题已经有最佳答案,请猛点这里访问。

我的问题有点类似于以下帖子。

PHP错误:无法修改标头信息–标头已发送

但就我而言,一旦确定登录表单中没有验证错误并且用户的登录信息与数据库的登录信息匹配,我便选择开始会话。这是下面的代码:

登录页面(任何html之前)

Login.php代码段(在html正文中)

} else {

$user = $_POST['username'];

$userpass = md5($_POST['password']);

$login_results = statement("select username, password from `$admin` where username='$user' and password='$userpass'");

if (mysql_num_rows($login_results)!= 1) {

$errmsg ="Login failed: Username or password not on file";

}else {

$_SESSION['username'] ="$user";

$_SESSION['ip'] = $_SERVER['REMOTE_ADDR'];

header("Location: index.php");

}

}

}

}

如果您看上面代码的else块,我正在验证登录名,如果它很好,我想分配session变量并转到我的索引页。在一开始就具有以下代码:

//Session Timeout Script -- used to determine the amount of time the user has been idle.  If it the user has been idle for longer then the session time, log the user out.

//Secondary to the Timeout Script, the username and ip address is checked for validility and if either fails redirect the user to the login page.

session_cache_expire( 20 );

session_start();

$inactive = 1200;

if(isset($_SESSION['start']) ) {

$session_life = time() - $_SESSION['start'];

if($session_life > $inactive){

header("Location: logout.php");

}

}

$_SESSION['start'] = time();

$newip = $_SERVER['REMOTE_ADDR'];

if (!isset($_SESSION['username']) ||  empty($_SESSION['username']) || $newip!=    $_SESSION['ip']) {

header('Location: login.php');

}

现在通读前一位作者的问题,有人提到header()应该是在发送重定向的代码中执行的第一件事,在我的情况下,该代码是login.php。这样做允许我登录,但是注销后,我将破坏所有会话,并使用header()将我发送回登录页面。这将使登录页面重定向回索引页面,因为它已读取第一行代码。有办法避免这种情况吗?所以我不需要重复在login.php顶部已经存在的一些代码逻辑?

安德烈

是的,header必须在任何其他输出之前调用,http本身需要它,而没有办法解决。 但是,您可以在session_start()之后调用标头。

因此,您可以启动会话,从$_POST检查登录数据,然后启动html输出。

顺便说一句,为什么要连续使用三个session_name?

好吧,我现在将我的if else块(后文中显示的其他块)移到了任何html输出之前,并删除了session_names,以

忽略这个帖子,罪魁祸首是多余的空间

我在标头函数中遇到了类似的问题。

首先,请确保.php文件的开头和结尾没有空格。

这样的事情有时会导致此类错误:

//Codes...

如您所见,PHP标记开始前有一个空格。 当您的PHP代码与HTML混合使用时,会导致荒谬的错误。

据我所记得,在打开PHP标记后,对session_start()函数的调用必须是文件开头的第一行代码。

我很确定那会在不久前引起我一些问题。

哦,还有另一件事。 据我记得,您无法多次调用header()函数。 级联是不可能的。

确定再次读取错误,它声称输出已经发送到我的header()执行之前的包含文件中。 现在,我进入该文件并删除了空格,现在感谢其工作,感谢M2X。

当然! ;-]不要忘记为其他人遇到的问题标记为已回答。

您可能还需要使用输出缓冲。 请参阅有关OB任务的PHP手册。

1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看REAdMe.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。 1、资源项目源码均已通过严格测试验证,保证能够正常运行; 2、项目问题、技术讨论,可以给博主私信或留言,博主看到后会第一时间与您进行沟通; 3、本项目比较适合计算机领域相关的毕业设计课题、课程作业等使用,尤其对于人工智能、计算机科学与技术等相关专业,更为适合; 4、下载使用后,可先查看READme.md或论文文件(如有),本项目仅用作交流学习参考,请切勿用于商业用途。 5、资源来自互联网采集,如有侵权,私聊博主删除。 6、可私信博主看论文后选择购买源代码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值