首页 > 解决方案 > 通过 url 直接用户访问页面

问题描述

嗨,我想使用下面的 php 代码阻止对我的页面的直接 URL 访问,但如果我将它包含到我的表单中,即使在输入我的用户名和密码后我也无法登录,这就像我被锁定在我的应用程序之外。有人可以帮忙吗

那是我的 security.php 文件

<?php

if(!isset ($_SESSION['user']))
{
    header ('location:user_login.php');
}

?>

和用户登录文件

<?php


if (isset($_POST['btnLogin']))
{
    $user = $_POST['user'];
    $password = $_POST['password'];

    //sql injection security
    $user = mysqli_real_escape_string($con,$user);
    $password = mysqli_real_escape_string($con,$password);

    //select database

    $db = mysqli_select_db($con,'nesthet');

    $query = "SELECT * from users where user='$user' AND password='$password'";
    $query_run = mysqli_query($con,$query);
    $role = mysqli_fetch_array($query_run);
        
    //user redirection base on user role

    if($role['role'] == "admin"){
       
        session_start();
        $_SESSION['user'] = $user;
        header('location: admin.php');
    }
    else if($role['role'] == "user") {
        
        $_SESSION['user'] = $user;
        header('location: mdi_parent.php');
    }
    else {
        $_SESSION['status'] = "Username or password is invalid";
        header('location: index.php');
    }
}

?>

标签: php

解决方案


在 security.php 中,您应该在使用 $_SESSION 变量之前执行 session_start()

<?php
if(!isset ($_SESSION['user']))
{
    header ('location:user_login.php');
}
?>

在您的代码中,您只需在角色为管理员时启动会话

if($role['role'] == "admin"){
    session_start();
    $_SESSION['user'] = $user;
    header('location: admin.php');
}
else if($role['role'] == "user") {
    
    $_SESSION['user'] = $user;
    header('location: mdi_parent.php');
}
else {
    $_SESSION['status'] = "Username or password is invalid";
    header('location: index.php');
}

推荐阅读