php - 如何解决: session_start(): Cannot send session cache limiter - headers already sent

标签 php html mysql authentication

如何解决此错误(session_start():无法发送 session 缓存限制器 - header 已发送(输出从/opt/lampp/htdocs/hrms/header.php:140 开始))?这是登录页面。

日志:

PHP Warning:  session_start(): Cannot send session cache limiter - headers already sent (output started at /opt/lampp/htdocs/hrms/header.php:140) in /opt/lampp/htdocs/hrms/index.php on line 74

PHP Warning:  Cannot modify header information - headers already sent by (output started at /opt/lampp/htdocs/hrms/header.php:140) in /opt/lampp/htdocs/hrms/index.php on line 82

第 74 行:

session_start();

第 82 行:

header('location:home.php');

页面:

<?php include('dbcon.php');include('header.php');?>
<body>
<?php include('nav-top1.php'); ?>
<div class="wrapper">

</br>
</br>
</br>
</br>
</br>
</br>
</br>
<div id="element" class="hero-body-index">
    <div class="alert alert-info">
    <p><font color=""><h2>Login</h2></font></p>
    Enter the details to login your account
    </div>

    <hr>
    <form method="POST" >
    <table>
    <tr><td><font color="">UserName:</font>&nbsp;&nbsp;</td><td><input type="text"  name="UserName" class="UserName_hover"></td></tr>
    <tr><td>...<td></tr>
    <tr><td><font color="">Password:</font>&nbsp;&nbsp;</td><td><input type="Password" name="Password" class="Password_hover"></td></tr>
    <tr><td>...<td></tr>
    <tr><td></td><td>   <button class="btn btn-primary btn-large" name="Login"><i class="icon-ok-sign icon-large"></i>&nbsp;Login</button></td></tr>
    <tr><td>
    </td><tr>
    </form>
    </table>

    </br>
    <div class="error">
    <?php

if (isset($_POST['Login'])){

$UserName=$_POST['UserName'];
$Password=$_POST['Password'];

$login_query=mysql_query("select * from user where UserName='$UserName' and Password='$Password' and User_Type='Admin'");
$count=mysql_num_rows($login_query);

$login_query1=mysql_query("select * from user where UserName='$UserName' and Password='$Password' and User_Type='User'");
$count1=mysql_num_rows($login_query1);



$row1=mysql_fetch_array($login_query1);
$f=$row1['FirstName'];
$l=$row1['LastName'];

$row=mysql_fetch_array($login_query);
$f=$row['FirstName'];
$l=$row['LastName'];





if ($count1 == 1){
session_start();
$_SESSION['id']=$row1['User_id'];
$_SESSION['User_Type']=$row1['User_Type'];
$type=$row1['User_Type'];

mysql_query("INSERT INTO history (data,action,date,user)VALUES('$f $l', 'Login', NOW(),'$type')")or die(mysql_error());


header('location:home_user.php');
}

if ($count > 0){
session_start();
$_SESSION['id']=$row['User_id'];
$_SESSION['User_Type']=$row['User_Type'];
$type=$row['User_Type'];

mysql_query("INSERT INTO history (data,action,date,user)VALUES('$f $l', 'Login', NOW(),'$type')")or die(mysql_error());


header('location:home.php');
}else{
?>
    <div class="alert alert-error">
    <button class="close" data-dismiss="alert">Ч</button>
   Please check your UserName and Password
    </div>
<?php } 

}

?>  
</div>
</div>
</br>
</br>
</br>
</br>
</br>
</br>
</br>
<?php include('footer.php');?>


</div>
</body>
</html>

最佳答案

在您调用 session_start() 时,您的脚本已经发送了 HTTP header ,因此您再修改它们就为时已晚。在向浏览器进行任何输出之前,应调用 session_start()header() 也是如此。要解决这个问题,只需将函数调用放在输出任何 HTML 之前,即放在文件的顶部。

进一步阅读:https://stackoverflow.com/a/8028987/4261029

关于php - 如何解决: session_start(): Cannot send session cache limiter - headers already sent,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27070727/

相关文章:

python - Hue 主管启动错误 hadoop 工作正常 - Hue 中的 Python 包无法工作

php - Zend\Db\ResultSet\ResultSet 对象在哪里存储检索到的数据?

php - Laravel - 返回 json 和 http 状态码

java - 如何将mysql数据库添加到项目设置中。?

mysql - 如何使用 mysql 插入一条插入命令?

html - 如何使用 CSS 将 "crop"矩形图像变成正方形?

php - 如果已经存在则插入数据/更新

php - while 循环中的第一个元素?

php - 通过mysql select查询填充下拉列表

css - 在行中将文本包装成两个跨度