如何不让用户在不注销的情况下返回 login.php?

Posted

技术标签:

【中文标题】如何不让用户在不注销的情况下返回 login.php?【英文标题】:How not let user go back to login.php without logging out? 【发布时间】:2019-12-24 18:16:36 【问题描述】:

我还有一个 login.php、loginer.php、registration.php、register.php、logout.php、logouter.php、dashboard.php 和 menu.php 文件。 menu.html 包含在我的dashboard.php 中,因为menu.html 包含我想退出时必须单击的按钮。

我在 htdocs 中有我的项目的文件夹。在项目的文件夹中,我有一个“hu”文件夹,因为该网站目前使用的是匈牙利语。在这个“hu”文件夹中,除了dashboard.php 和menu.html 之外,我还有所有提到的.php 文件,因为这两个文件位于“注册”文件夹中,该文件夹也在“hu”文件夹中。

我有一个注册登录系统。但是当我登录时,我不需要退出登录来访问 login.php,因为我只需要单击“返回”按钮。 为什么会这样?

我已经尝试过写“session_destroy();”几乎无处不在。我没有工作。

login.php 是这样的:

<!DOCTYPE html>
<html>
<head>
    <title>Bejelentkezés | LASOW Projekt</title>
    <link rel="stylesheet" href="css/login.css">
</head>
<body>
    <?php
        include 'navbar.html';
    ?>
    <div class="main">
        <h1>Bejelentkezés</h1>
        <form action="loginer.php" method="POST">   
            <label for="">Email:</label><br>
            <input type="text" name="emailaddress"><br>
            <label for="Jelszó:">Jelszó:</label><br>
            <input type="password" name="password"><br>
            <input name="login" type="submit" value="Belépek">
        </form>
    </div>
</body>
</html>

loginer.php 是这样的:

<?php
session_start();
include '../connect.php';

$error = ""; //Variable for storing our errors.
if(isset($_POST["login"]))

if(empty($_POST["emailaddress"]) || empty($_POST["password"]))

    $error = "Mindkét mező kitöltése kötelező!";
else

    // Define $username and $password
    $emailaddress=$_POST['emailaddress'];
    $password=$_POST['password'];

    // To protect from mysql injection
    $emailaddress = stripslashes($emailaddress);
    $password = stripslashes($password);
    $emailaddress = mysqli_real_escape_string($conn, $emailaddress);
    $password = mysqli_real_escape_string($conn, $password);
    $password = md5($password);

    //Check username and password from database
    $sql="SELECT id,emailaddress,password FROM users WHERE emailaddress='$emailaddress' and password='$password'";
    $result=mysqli_query($conn,$sql);
    //$row=mysqli_fetch_array($result,MYSQLI_ASSOC);

    //email és jelszó létezése esetén folytatódik a folyamat
    //Otherwise echo error.

    if(mysqli_num_rows($result) == 1)
    
    $_SESSION['emailaddress'] = $emailaddress; // Initializing Session
    header("location: registered/dashboard.php"); // átirányítás a login.php-re
    else
    
    $error = "Helytelen email vagy jelszó";
    


?>

这是 register.php 的样子:

<!DOCTYPE html>
<html>
<head>
</head>
<body>
<?php
if(isset($_POST["register"]))
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "lasowcompany";


// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if (!$conn) 
    die("Connection failed: " . mysqli_connect_error());


mysqli_set_charset($conn,"utf8");
//nem $POST hanem $_POST a htmlspecialchars nem enged javasrcipt kódot be írni az adatbázisba
$surname = htmlspecialchars($_POST['surname']);
$firstname = htmlspecialchars($_POST['firstname']);
$emailaddress = htmlspecialchars($_POST['emailaddress']);
$phonenumber = htmlspecialchars($_POST['phonenumber']);
$password = md5($_POST['password']);
$passwordconfirm = md5($_POST['passwordconfirm']);


if(empty($surname))
    
        echo "A vezetéknevet meg kell adnod!";
    
elseif(empty($firstname))
    
        echo "A keresztnevet meg kell adnod";
    
elseif(empty($emailaddress))
    
        echo "Az email címet meg kell adnod";
    
elseif($password != $passwordconfirm)
    
        echo "A megadott jelszavak nem egyeznek";
    
elseif(strlen($password) < 6)
    
        echo "Minimum 6 karakteres lehet a jelszó";
    

elseif(empty($password))
    
        echo "A kívánt jelszót meg kell adnod";
    else

    $sql = "INSERT
            INTO 
            users
            (surname, 
            firstname,
            emailaddress,
            phonenumber,
            password)
            VALUES
            ('".$surname."',
             '".$firstname."',
             '".$emailaddress."',
             '".$phonenumber."',
            '".$password."')";

    if ($conn->query($sql) === TRUE) 
        echo "New record created successfully";
     else 
        echo "Error: " . $sql . "<br>" . $conn->error;
    
        $conn->close();
        header('Location: dashboard.php');
    


/*$sql = "INSERT INTO users (surname, firstname, emailaddress, phonenumber, password, passwordconfirm)
VALUES ('".$_POST["surname"]."','".$_POST["firstname"]."','".$_POST["emailaddress"]."','".$_POST["phonenumber"]."','".$_POST["password"]."','".$_POST["passwordconfirm"]."')";
*/



?>
</body>
</html>

注销.php:

<?php
 session_start();
 unset($_SESSION['emailaddress']);
 header("Location: logouter.php");
?>

dashboard.php:

<?php
session_start();
?>
<!DOCTYPE html>
<html>
<head>
    <style>
    h2  text-align: center; 
    </style>
</head>
<body>
    <?php
    if(isset($_SESSION['emailaddress']))
        include 'menu.html';
    else
        header("Location: ../logout.php");
        exit();
    
    ?>
    <h2>Üdv a LASOW rendszerében</h2>
</body>
</html>

menu.html:

<ul>
        <li><span style="font-size:30px;cursor:pointer" onclick="openNav()">&#9776;</span></li>
        <li><a class="active" href="#home">Főoldal</a></li>
    </ul>
    <div id="mySidenav" class="sidenav">
        <a href="javascript:void(0)" class="closebtn" onclick="closeNav()">&times;</a>
        <a href="dashboard.php">Főoldal</a>
        <a href="../lectures.php">Tudás</a>
        <a href="profile.php">Profil</a>
        <a href="../logout.php">Kilépés</a>
    </div>
    <script>
function openNav() 
  document.getElementById("mySidenav").style.width = "30%";


function closeNav() 
  document.getElementById("mySidenav").style.width = "0";

</script>

如果用户没有注销,不要让用户返回 login.php。

【问题讨论】:

在您的登录页面中有一个条件是检查用户是否已登录,然后如果他们登录则重定向到仪表板或显示登录表单 @MasivuyeCokile 我怎么能做到! 【参考方案1】:

您必须在要跟踪的每个页面中使用 会话

【讨论】:

也喜欢dashboard.php? 您的文件@Erik 中包含的文件最多? 在您必须开始会话的第一页上,然后如果您的站点中有一种分层,您必须检查它,假设您必须登录的主页然后您无法访问例如,在您登录之前购买产品,因此在主页中启动会话,然后在购买产品中检查它是否已经设置

以上是关于如何不让用户在不注销的情况下返回 login.php?的主要内容,如果未能解决你的问题,请参考以下文章

如何在不使用 Facebook 登录/注销按钮的情况下以编程方式从 Facebook SDK 3.0 注销?

您可以在不注销用户的情况下更新用户的 cookie 信息吗?

如何在不刷新页面的情况下使用 JS SDK 检测从 fb 注销

如何在不使用 wp-login.php 的情况下从 wordpress 注销?

如何在不改变状态的情况下对 redux 操作做出反应

如何在不注销并重新登录的情况下重新加载 .bashrc 设置?