php 如何解决:session_start():无法发送会话缓存限制器 - 已发送标头
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/27070727/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
How to solve: session_start(): Cannot send session cache limiter - headers already sent
提问by CatUser
How to solve this error (session_start(): Cannot send session cache limiter - headers already sent (output started at /opt/lampp/htdocs/hrms/header.php:140))? This is login page.
如何解决此错误(session_start():无法发送会话缓存限制器 - 已发送标头(输出开始于 /opt/lampp/htdocs/hrms/header.php:140))?这是登录页面。
Logs:
日志:
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
line 74:
第 74 行:
session_start();
line 82:
第 82 行:
header('location:home.php');
Page:
页:
<?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> </td><td><input type="text" name="UserName" class="UserName_hover"></td></tr>
<tr><td>...<td></tr>
<tr><td><font color="">Password:</font> </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> 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>
回答by piers
At the point you call session_start()
your script has already sent the HTTP headers, making it to late for you to modify them. session_start()
should be called before you make any output to the browser. The same goes for header()
. To solve this simply put the function calls before you output any HTML, i.e. at the top of your file.
在您调用session_start()
脚本时,您的脚本已经发送了 HTTP 标头,因此修改它们为时已晚。session_start()
应该在向浏览器进行任何输出之前调用。也是如此header()
。要解决这个问题,只需将函数调用放在输出任何 HTML 之前,即放在文件的顶部。
Further reading: https://stackoverflow.com/a/8028987/4261029
回答by Ruddy Lodonou Oke
put session_start(); in first linebefore any html output
把 session_start(); 在任何 html 输出之前的第一行
avoidscalling session_start in your controls.
避免在您的控件中调用 session_start。
whether your page uses sessions then you place it first in your code, or your page does not use sessions.
无论您的页面使用会话,然后将其放在代码中,还是您的页面不使用会话。
try this
尝试这个
<?php
/**
* your dbcon.php must contain only fonctions
* no oupout
*/
include('dbcon.php');
?>
<body>
<?php include('header.php'); ?>
<?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> </td><td><input type="text" name="UserName" class="UserName_hover"></td></tr>
<tr><td>...<td></tr>
<tr><td><font color="">Password:</font> </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> 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){
// put this in another file
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){
// put this in another file
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>