PHP重定向如果已经登录

时间:2018-11-27 12:14:18

标签: php

我正在使用一个简单的登录表单;如果已经登录的用户进入登录页面,我想重定向

登录表格

<?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页面

2 个答案:

答案 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 -> elseifsession_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>
相关问题