当我点击登录时..它不会自动将我重定向到home.php,我必须刷新页面才能重定向我。我猜第一个header()工作正常bc它响应页面刷新。什么不起作用的是if语句中的第二个header()。我究竟做错了什么?非常感谢你的帮助。
的login.php
<?php
session_start();
if($_SESSION['user']!=""){
header("Location: home.php");
}
include_once 'db.php';
if(isset($_POST['login'])){
$uname = mysqli_real_escape_string($conn, $_POST['uname']);
$upass = mysqli_real_escape_string($conn, $_POST['upass']);
$sql = "SELECT * FROM users WHERE username='$uname'";
$result = $conn->query($sql);
$row = $result->fetch_assoc();
if($row['password']==$upass){
$_SESSION['user'] = $row['username'];
header("Location: home.php");
}
else{
echo "Unable to log in, please try again.";
}
}
?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post">
<input type="text" name="uname" placeholder="User Name" required /><br>
<input type="text" name="upass" placeholder="Password" required /><br>
<button type="submit" name="login">login</button>
</form>
</body>
</html>
home.php
<?php
session_start();
if(isset($_POST['logout']))
{
session_destroy();
unset($_SESSION['user']);
header("Location: index.php");
}
?>
Welcome <?php echo $_SESSION['user'];?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<form method="post">
<button type="submit" name="logout">Sign Out</button>
</form>
</body>
db.php中
<?php
$conn = new mysqli();
$conn->connect('localhost', 'singta', 'Lante1', 'wuzzdb');
if ($conn->connect_errno) { echo "Failed to connect to MySQL: (" . $conn->connect_errno . ") " . $mysqli->connect_error; }
?>
的index.php
<?php
session_start();
if($_SESSION['user']!=""){
header("Location: home.php");
}else{
echo "You're not logged In";
}
?>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
<br><br><br>
<a href="login.php">Login Here</a>
</body>
答案 0 :(得分:4)
header()
函数调用向浏览器发送一个标题,告诉它去哪里,但它不会停止执行PHP脚本。因此,在用于重定向的header()
调用之后,几乎在所有情况下都应该在exit;
之后直接添加{。}}。
<?php
session_start();
if($_SESSION['user']!=""){
header("Location: home.php");
exit;
}
同样在第二次header()
来电时。
附加说明
在尝试像这样测试之前,您还应检查$_SESSION['user']
是否存在
session_start();
if( isset($_SESSION['user']) && $_SESSION['user']!=""){
header("Location: home.php");
exit;
}
这需要在您测试会话中的user
时进行,就像他们没有登录一样,它实际上并不存在。
这是在LIVE服务器上学习PHP的问题之一,其中关闭错误显示。因此,在您学习甚至之后,在实时服务器上开发脚本时,请记住将这两行添加到您正在开发的脚本的顶部
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
但是请记得删除当脚本作为其错误形式工作时向用户显示此类错误。