假设一个有效的登录名被POST,那么我的代码在setcookie函数之前立即结束时会出现一些问题。这是我的密码。
<?php
echo 'v1.3.4';
require_once '../ssi/mysql.php';
if(isset($_POST['action'])){
$username = $_POST['username'];
$password = md5($_POST['password']);
$check = mysqli_query($con, "SELECT * FROM admins WHERE username = '$username' AND password = '$password' LIMIT 1");
$checknm = mysqli_num_rows($check);
if($checknm == 1){
while($info = mysqli_fetch_array($check)){
$keypair = $info['keypair'];
setcookie("f2admin", $keypair, time()+3600);
header('Location: index.php');
exit;
}
}else{
$err = "Invalid Username or Password. Please try again.";
}
}
?>
在使用header
之前,您需要删除/注释echo
的任何内容
if($checknm == 1){
while($info = mysqli_fetch_array($check)){
$keypair = $info['keypair'];
//echo 'Keypair: '.$keypair;
setcookie("f2admin", $keypair, time()+3600);
header('Location: index.php');
echo 'YES ';
exit;
echo 'NO ';
}
}
好吧,我注意到了一些事情。
-
header()
设置在echo 'YES';
之上,这意味着页面将在输出内容(回显)之前重定向。 -
exit;
设置在echo 'NO';
之上,这意味着页面将在到达echo 'No';
之前退出。 -
header()
上方有一个回声集,导致header()重定向不起作用。
顺便说一句,如果你试图停止while循环,函数应该是break;
,而不是exit;
更新
我让它在我当地的环境中正常工作。我发现了一些东西。
1) 表单中没有设置任何操作(不确定是否需要)。
2) $err永远不会被回显(因此是空白页),但是代码本身确实有效。
3) mysqli_fetch_array循环是多余的,因为您强制mysql将结果限制为1。
$info = mysqli_fetch_array($check);
$keypair = $info['keypair'];
setcookie("f2admin", $keypair, time()+3600);
header('Location: index.php');
exit;
在使用header
执行任何操作之前,您的代码都不能输出任何内容。输出必须在标头信息之后。