我正在使用一个简单的登录表单;如果已经登录的用户进入登录页面,我想重定向
登录表格
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<body>
<form action="login.php" method="POST">
<input type="text" placeholder="username" name="uname" required /><br>
<input type="password" placeholder="password" name="pwd" required /><br>
<input type="submit" value="Login">
</form>
<script>
<?php if(isset($_SESSION['user'])&&!empty($_SESSION['user']))
header("Location: booking.php");
else if(isset($_SESSION['login_status']) && $_SESSION['login_status'] !='') { ?>
alert('<?php echo $_SESSION['login_status']; ?>');
<?php unset($_SESSION['login_status']); session_destroy ();} ?>
</script>
</body>
</html>
用于数据库连接和查询的PHP
<?php
require_once '../config.php';
session_start();
$user = $_POST['uname'];
$pwd = $_POST['pwd'];
// To protect MySQL injection (more detail about MySQL injection)
$user = stripslashes($user);
$pwd = stripslashes($pwd);
$pwd = sha1($pwd);
$query="SELECT * FROM user WHERE uname='$user' and pwd='$pwd' and isActive=1";
$stmt=$conn->prepare($query);
$stmt->execute();
$stmt->setFetchMode(PDO::FETCH_ASSOC);
$result=$stmt->fetch();
if($result){
$_SESSION['user'] = $result['fullname'];
$_SESSION['login_status'] = "Sucessfully Logged in";
header("Location: booking.php");
}else{
$_SESSION['login_status'] = "Login Credentials incorrect";
header("Location: " . $_SERVER["HTTP_REFERER"]);
}
?>
此代码与我的本地主机完美配合,但是如果我已经将其放在共享主机中(如果我已经登录)并转到登录页面,则不会将我重定向到页面-> booking.php。 如果我在这里戒酒
<?php if(isset($_SESSION['user'])&&!empty($_SESSION['user']))
header("Location: booking.php");
警报起作用,而不是header("Location: booking.php");
;但是如您所见,在php连接页面上也可以使用相同的代码。
谁能指出我在这里犯的错误? 请注意:登录有效,没有任何问题;即:如果我输入正确的用户名和密码,它会将我重定向到相应的页面,唯一的问题是,登录后如果我返回登录表单,它不会将我重定向到booking.php页面
答案 0 :(得分:1)
您需要在HTML代码之前使用header
。尝试类似的东西:
<?php session_start();
if(isset($_SESSION['user'])&&!empty($_SESSION['user'])){
header("Location: booking.php");
exit();
}
?>
<!DOCTYPE html>
<html>
<body>
<form action="login.php" method="POST">
<input type="text" placeholder="username" name="uname" required /><br>
<input type="password" placeholder="password" name="pwd" required /><br>
<input type="submit" value="Login">
</form>
<script>
<?php if(isset($_SESSION['login_status']) && $_SESSION['login_status'] !='') { ?>
alert('<?php echo $_SESSION['login_status']; ?>');
<?php unset($_SESSION['login_status']); session_destroy ();} ?>
</script>
</body>
</html>
答案 1 :(得分:0)
您要在此处的elseif语句中取消设置logging_status并破坏会话:
<?php if(isset($_SESSION['user'])&&!empty($_SESSION['user']))
header("Location: booking.php");
else if(isset($_SESSION['login_status']) && $_SESSION['login_status'] !='') { ?>
alert('<?php echo $_SESSION['login_status']; ?>');
<?php unset($_SESSION['login_status']); session_destroy ();} ?>
这是重定向失败的原因,并且您在else if -> elseif
和session_destroy () -> session_destroy()
上还有一些语法上的缺陷。
以下是可为您修复错误的代码:
<?php session_start(); ?>
<!DOCTYPE html>
<html>
<body>
<form action="login.php" method="POST">
<input type="text" placeholder="username" name="uname" required /><br>
<input type="password" placeholder="password" name="pwd" required /><br>
<input type="submit" value="Login">
</form>
<script>
<?php
if(isset($_SESSION['user'])&&!empty($_SESSION['user']))
{
header("Location: booking.php");
}
elseif(isset($_SESSION['login_status']) && $_SESSION['login_status'] !='')
{
?>
alert('<?php echo $_SESSION['login_status'];?>');
<?php
}
unset($_SESSION['login_status']);
session_destroy();
?>
</script>
</body>
</html>