繁体   English   中英

PHP 错误无法发送会话缓存限制器 - 标头已发送

[英]PHP Error Cannot send session cache limiter - headers already sent

您好,我有三个 PHP 代码,其中一个页面是index.php ,我在其中扫描用户的用户名和密码,然后将其发送到另一个文件userlogin_process.php ,在那里我首先启动会话,然后匹配与数据库扫描的值,如果它们匹配,我将它们存储到会话变量中,但它在该页面上向我显示 2 个警告无法发送会话缓存限制器 - 标题已发送,我拥有的最后一页是user_session.php ,我在其中定位用户到网站的主页。

索引.php

session_start();
<form method="post" action="userlogin_process.php">
<div class="p">User Login</div>  
<table style="margin-top:5%;margin-left:12%;">
<tr><td> <label style="font-size:16px"> UserName :</label></td></tr>
<tr><td><input class="input" type="text" name="username" placeholder="FirstName"/></td></tr>
<tr><td><label style="font-size:16px">Password :</label></td></tr>
<tr><td><input class="input" type="password" name="userpass" placeholder="Mobile No"/></td></tr>
<tr><td>&nbsp;</td></tr>
<tr><td align="center"><input class="button" type="submit" name="usersubmit" value="Login"/></td></tr>
</table>
</form>

user_loginprocess.php

<?php 
session_start();
include("db.php");
$uname = $_POST['username'];
$upass = $_POST['userpass'];
echo $uname;
echo $upass;
$sql = mysql_query("select id,fname,mobile from user where fname='$uname'") or die(mysql_error());
$count = mysql_num_rows($sql);
if ($count > 0){
while($row = mysql_fetch_array($sql)){
$id = $row['id'];
$fname = $row['fname'];
$mobile = $row['mobile'];
}
}
if( $uname == $fname && $upass == $mobile ){
$_SESSION['uid'] = $id; 
$_SESSION['username'] = $fname;
$_SESSION['usermobile'] = $mobile;
$_SESSION['login'] = "yes";
header('location:user_session.php');
}
else{       
header('location:index.php?msg=incorrect');
} 
?> 

用户会话.php

<?php 
 session_start();
if( isset($_SESSION['login']) == "yes"){
header('location:user_detail.php?pageno=1');
} 
else{   
header('location:index.php?msg=login');
}
 ?>

我能看到的第一件事是您多次使用session_start() 正如您在他们的文档中看到的那样,它不会造成任何伤害,但可能会引发错误或警告......所以最好坚持只使用一次。

二,请使用mysqli_*文档,因为my_sql已被弃用。 PDO

这部分看起来不对:

session_start();
<form method="post" action="userlogin_process.php">

它应该是:

<?php session_start(); ?>
<form method="post" action="userlogin_process.php">

但无论哪种方式都是错误的,因为会话应该盯着页面顶部。 最后尝试修复所有这些小错误,它可能会起作用或引发另一个错误,这在任何一种情况下都是好的,因为正在向前发展:)

要尽早停止发送标头,最好缓冲输出并在脚本末尾发送。 为此,请在 php.ini 中打开缓冲。

output_buffering = On

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM