防止用户在登录后返回&使用PHP注销

时间:2014-02-08 16:52:46

标签: php url caching login logout

我在WampServer中使用PHP有一个简单的登录和注销系统。登录表单在index.php上,提交后会导致login.php。 login.php有登出链接(logout.php)。

的index.php

<html>
    <head>
    </head>

    <body>
        <form action="login.php" method="POST">
            Username:<input name="username" type="text">
            <br>
            Password:<input type="password" name="password">
            <br>
            <input type="submit" name="submit" value="login">

        </form>
    </body>
</html>

的login.php

<html>  
<head>

</head>
<body>

<?php

    define('DB_NAME','db_name');
    define('DB_USER','root');
    define('DB_PASSWORD','');
    define('DB_HOST','localhost');

    $link=mysql_connect(DB_HOST,DB_USER,DB_PASSWORD);

    if (!$link)
    {
        die('Failed to connect to MySQL: ' . mysql_error());
    }

    $query = "CREATE DATABASE IF NOT EXISTS " . DB_NAME;

    if(!mysql_query($query)){
        die('Error in creating database : <br> ' . mysql_error());
    }
    $db_selected = mysql_select_db (DB_NAME, $link);
    if(!$db_selected) {
        die(' Can\'t use ' . DB_NAME . ' : ' . mysql_error() );
    }

    session_start();
    if (isset($_POST['submit'])) {
        $username = $_POST['username'];
        $password = $_POST['password'];

        if ($username && $password ){

            $query = mysql_query("SELECT * FROM login WHERE username='$username'");
            $numrows = mysql_num_rows($query);

            if($numrows!==0){
                while($row = mysql_fetch_assoc($query)){
                    $dbusername = $row['username'];
                    $dbpassword = $row['password'];
                }

                if ($username==$dbusername && $password==$dbpassword) {
                    echo "You are logged in !";
                    @$_SESSION['username'] = $username;
                }
                else{
                    die("password incorrect");
                }
            }
            else{
                die("User does not exist");
            }
        }
        else {
            die("Please enter correct username and password");
        }
    }
?>

        <br>
        <a href="logout.php">Logout</a>
    </body>

</html>

logout.php

<?php
    session_start();
    unset($_SESSION["username"]);
    header("Location: index.html");

?>

哪个有效。

现在,我想阻止以下情况。

  1. 退出后返回login.php
  2. 登录后返回index.html
  3. 通过输入这些网页的网址来登录login.php和index.html。
  4. 我已尝试在login.php中添加以下内容以清除缓存,但尚未解决。

    header('Cache-Control: no-cache, must-revalidate');
    header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
    

    header ("Expires: Mon, 26 Jul 1997 05:00:00 GMT");    // Date in the past
    header ("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    header ("Cache-Control: no-cache, must-revalidate");  // HTTP/1.1
    header ("Pragma: no-cache");
    

    事实上,如果我不编写上述2个代码段中的任何一个,浏览器会要求重新提交表单。但如果我写它,它会直接显示页面而不会阻止任何事情。

    我在此网站上看到this question但无法理解如何应用它。任何人都可以请解释如何清除缓存或使用PHP中的任何其他方法来做到这一点?

1 个答案:

答案 0 :(得分:0)

你可以使用

if(isset($_SESSION["username"]))
{
// header to another location 
}

//索引

if(isset($_SESSION["username"]))
{
header("Location: login.html");
}