用户登录后如何防止浏览器返回登录表单页面?

时间:2016-01-30 23:57:15

标签: php session

我正在尝试创建一个管理员可以通过管理门户上传图书的网站。我已经成功登录但是当用户登录并按下后退按钮(在浏览器上)时,表单页面再次出现,当他们注销并按下后退按钮时也会出现同样的情况,应该出现的页面才会出现他们再次登录后我在互联网上搜索了很多但都是徒劳的。请提出建议。

<?php

session_start();

$username = $_POST['username'];
$password = $_POST['password'];

if ($username && $password) {
    $connect = mysqli_connect("localhost", "root", "") or die ("Could'nt connect to database!"); //database connection
    mysqli_select_db($connect, "mahmood_faridi") or die ("Could'nt find database");
    $query   = ("SELECT * FROM user WHERE username= '$username'");
    $result  = mysqli_query($connect, $query);
    $numrows = mysqli_num_rows($result);

    if ($numrows !== 0) {
        while ($row = mysqli_fetch_assoc($result)) {
            $dbusername = $row['username'];
            $dbpassword = $row['password'];
        }
        if ($username == $dbusername && $password == $dbpassword) {
            $_SESSION['username'] = $username;
            $_SESSION['password'] = $password;
            header('location: help.php'); //another file to send request to the next page if values are correct.

            exit();
        } else {
            echo "Password Incorrect";
        }
        exit();
    } else {
        die("That user doesn't exists!");
    }
} else {
    die("Please enter a username and password");
}
?>

5 个答案:

答案 0 :(得分:4)

在登录屏幕上,在PHP中,在渲染视图之前,您需要检查用户是否已经登录,并重定向到用户登录后应该看到的默认页面。

同样,在需要登录的屏幕上,您需要检查用户是否未登录,如果没有,则将其重定向到登录屏幕。

// on login screen, redirect to dashboard if already logged in
if(isset($_SESSION['username'])){
    header('location:dashboard.php');
}


// on all screens requiring login, redirect if NOT logged in
if(!isset($_SESSION['username'])){
    header('location:login.php');
}

答案 1 :(得分:0)

您可以有条件地添加Java脚本代码以转到预期的页面。

<script>
history.forward(1);
</script>

当不存在和/或禁用Javascript时,这可能很烦人或失败。

答案 2 :(得分:0)

index.php页上,您需要将代码添加到php文件的顶部。...

        <?php
            include 'database.php';
session_start();
             if (isset($_SESSION['user_name'])) {
            header('location:home');
        }
        if (isset($_POST['submit'])) {

            $user = $_POST['user_name'];
            $password = $_POST['password'];

            $query = "select count(*) as count from users where user_name= '$user' and password = '$password';";
            $result = mysqli_query($link, $query) or die(mysqli_error($link));
            while ($row = mysqli_fetch_assoc($result)) {
                $count = $row['count'];

                if ($count == 1) {
                    $_SESSION['user_name'] = $user;
                    header('location:home');
                }
            }
        }
        ?>

这是另一页。在home.php页面上,您还需要在php文件的顶部添加代码以首先进行检查。

        <?php
        include 'database.php';
        if (!(isset($_SESSION['user_name']))) {
             header('location:index');
        }
        ?>

答案 3 :(得分:0)

我只是修改@sbecker的答案,重定向后使用exit()。 我也遇到过同样的问题,但是现在exit();为我工作。

// on login screen, redirect to dashboard if already logged in
    if(isset($_SESSION['username'])){
        header('location:dashboard.php');
      exit();
    }
    
    
    // on all screens requiring login, redirect if NOT logged in
    if(!isset($_SESSION['username'])){
        header('location:login.php');
       exit();
    }

答案 4 :(得分:-1)

我的建议:当用户点击某个链接/按钮

时,就会发生登录

登录服务器端发生后,使用php函数标题(&#39; url&#39;)将用户重定向到应该的URL。 (注意不要回复任何内容,否则重定向不会发生)

[编辑]你说你有第一个登录文件是html,这对我来说没问题,但你说它重定向到任何东西,然后你正在使用客户端的重定向。在我看来,你不应该使用该客户端重定向登录。可能是造成混乱。