注销后如何停止访问返回的页面

时间:2017-01-17 10:35:15

标签: php

我有一个问题,当用户登录它的确实很好,当他退出我试图破坏会话并阻止他通过点击后退按钮访问页面,但它没有工作用户注销,但当我点击浏览器的按钮他仍然能够通过单击后退按钮执行任务,即使他已退出。

这是我的表单代码:../ FrontEndFiles / AdminLogin.php

<div class="center">
    <form name="myForm" method="post" action="../Admin/AdminData.php" onsubmit="return validateForm()">
        <label>User name:</label>
        <input type="text" name="user_name" placeholder="User">
        <br>
        <br>
        <label>Password:</label>
        <input type="password" name="password" placeholder="Password">
        <br>
        <input type="submit" name="login_Admin" value="login">               
    </form>
</div>

在代码执行后点击提交按钮:../ Admin / AdminData.php

if (isset ($_POST['logout'])) {
    $dbname->logout();
}

并调用以下函数:

public function logout() {
    unset($_SESSION["dbuser_name"], $_SESSION["dbpassword"],   $_SESSION["dbid"]);
    session_unset();
    Session_destroy();
    header('Location: ../FrontEndFiles/AdminLogin.php');
    exit();
}

这是管理员的登录代码:

public function loginAdmin($login_admin) {
    if (!empty($login_admin[0]) || !empty($login_admin[1])) {
        $query = "SELECT Patient_ID FROM Patient WHERE Patient_name  = '$login_admin[0]' and Patient_password = $login_admin[1] and Role = 'a'";
        //var_dump($query);
        $abc = $this->conn->query($query);
        $row = mysqli_num_rows($abc);

        if ($row == 1) {
            while ($row1 = $abc->fetch_assoc()) {
                $_SESSION["dbuser_name"] = $row1['Patient_name '];
                $_SESSION["dbpassword"] = $row1['Patient_password'];
                $_SESSION["dbid"] = $row1['Patient_ID'];
            }
            header('Location: ../FrontEndFiles/Admin_Index.php');
        } else {
            header('Location: ../FrontEndFiles/AdminLogin.php');
        }
    } else {
        header('Location: ../FrontEndFiles/AdminLogin.php');
    }
}

6 个答案:

答案 0 :(得分:2)

为了防止用户在未登录的情况下访问页面,您需要做的是检查用户是否确实已登录。

例如:

// Prevent unauthorized users from visiting this page
if (!$_SESSION['dbuser_name']) {
    header("Location: login.php");
    exit;
}

注意 exit;之后的header(...)会阻止脚本进一步执行。有一些方法可以防止你的浏览器重定向。 exit;确保您的用户无法在未登录的情况下看到任何网页内容。

此外,当用户退出时,请务必清除其所有数据:

if (!isset($_SESSION)) {
    session_start();
}

session_destroy();
unset($_POST);

header("Location: login.php");
exit;

这很可能会解决您的问题。

另一个注释我建议您不要在会话中存储用户密码。

答案 1 :(得分:0)

使用元标记进行无缓存

<meta Http-Equiv="Cache-Control" Content="no-cache">
<meta Http-Equiv="Expires" Content="0"> 

答案 2 :(得分:0)

主文件Ex。 index.php或header.php写到下面的代码

if(!$_SESSION["dbuser_name"])
{
    header('Location: login.php');
}

答案 3 :(得分:0)

在Admin_Index.php的顶部添加此代码。

if(!isset($_SESSION['dbuser_name']) || !isset($_SESSION['Patient_password']) || !isset($_SESSION['Patient_ID'])) 
{
    header('Location: ../FrontEndFiles/AdminLogin.php');
    exit();
}

这会将您重定向到登录页面..如果用户登录并尝试输入您的Adminlogin。

答案 4 :(得分:0)

将此函数添加到functions.inc.php或使用所有脚本加载的任何文件中:

function isAuthorized(){
    if (isset($_SESSION) && isset($_SESSION['dbid'])){
        return true;
    }
    return false;
}

在需要授权的每个页面上,您只需:

if (!isAuthorized()){
    header("Location: login.php");
    die(); // Stop the script! Browsers can choose to ignore the redirect.
}

您可以选择在isAuthorized函数中执行重定向和die()..由您决定。

答案 5 :(得分:0)

在PHP代码中实现此功能,在每个页面的顶部,检查用户是否已登录,如果没有重定向到登录页面

<?php 
      if(!isset($_SESSION['isLogged'])) : 
      header("Location: login.php");  
?>