Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP登录重定向循环_Php_Mysql_Database_Login_Connection - Fatal编程技术网

PHP登录重定向循环

PHP登录重定向循环,php,mysql,database,login,connection,Php,Mysql,Database,Login,Connection,我希望你能帮助我,我已经在这几个小时了,我想不出来。我正在为特定用户创建一个要登录的管理面板。我得到了PHP和MYSQL连接钉登录工程完美,用户甚至可以注册。现在的问题是,用户只需使用直接url即可访问面板页面。这就是为什么我环顾四周,找到了一些解决办法。但出于某种原因,所有这些都以对我的重定向搜索而告终 这是我的密码: index.php |此页面检查用户是否已经登录,并包括用户需要查看的正确页面 <?php require_once("config/db.php"); // Datab

我希望你能帮助我,我已经在这几个小时了,我想不出来。我正在为特定用户创建一个要登录的管理面板。我得到了PHP和MYSQL连接钉登录工程完美,用户甚至可以注册。现在的问题是,用户只需使用直接url即可访问面板页面。这就是为什么我环顾四周,找到了一些解决办法。但出于某种原因,所有这些都以对我的重定向搜索而告终

这是我的密码: index.php |此页面检查用户是否已经登录,并包括用户需要查看的正确页面

<?php
require_once("config/db.php"); // Database Connection Details

require_once("classes/Login.php"); // Username check with mysql

$login = new Login();

if ($login->isUserLoggedIn() == true) {
    include("/home.php"); // Admin Panel main page

} else {
    include("views/not_logged_in.php"); // Login page
}

Login.php |使用mysql数据库检查用户和密码是否存在/是否正确,并在需要时抛出错误消息

<?php

class Login
{
    private $db_connection = null;

    public $errors = array();

    public $messages = array();

    public function __construct()
    {
        // create/read session, absolutely necessary
        session_start();

        if (isset($_GET["logout"])) {
            $this->doLogout();
        }
        elseif (isset($_POST["login"])) {
            $this->dologinWithPostData();
        }
    }

    private function dologinWithPostData()
    {
        if (empty($_POST['user_name'])) {
            $this->errors[] = "Username field was empty.";
        } elseif (empty($_POST['user_password'])) {
            $this->errors[] = "Password field was empty.";
        } elseif (!empty($_POST['user_name']) && !empty($_POST['user_password'])) {

            $this->db_connection = new mysqli(DB_HOST, DB_USER, DB_PASS, DB_NAME);

            if (!$this->db_connection->set_charset("utf8")) {
                $this->errors[] = $this->db_connection->error;
            }

            if (!$this->db_connection->connect_errno) {

                $user_name = $this->db_connection->real_escape_string($_POST['user_name']);

                $sql = "SELECT user_name, user_email, user_password_hash
                        FROM users
                        WHERE user_name = '" . $user_name . "' OR user_email = '" . $user_name . "';";
                $result_of_login_check = $this->db_connection->query($sql);

                if ($result_of_login_check->num_rows == 1) {

                    $result_row = $result_of_login_check->fetch_object();

                    if (password_verify($_POST['user_password'], $result_row->user_password_hash)) {

                        $_SESSION['user_name'] = $result_row->user_name;
                        $_SESSION['user_email'] = $result_row->user_email;
                        $_SESSION['user_login_status'] = 1;

                    } else {
                        $this->errors[] = "Wrong password. Try again.";
                    }
                } else {
                    $this->errors[] = "This user does not exist.";
                }
            } else {
                $this->errors[] = "Database connection problem.";
            }
        }
    }

    public function doLogout()
    {
        // delete the session of the user
        $_SESSION = array();
        session_destroy();
        // return a little feeedback message
        $this->messages[] = "You have been logged out.";

    }

    public function isUserLoggedIn()
    {
        if (isset($_SESSION['user_login_status']) AND $_SESSION['user_login_status'] == 1) {
            return true;
        }
        // default return
        return false;
    }
}

$\u会话['user']
未在任何地方定义。也许您的意思是检查会话['user\u name']
。您还需要确保变量存在

已更新 如果未设置用户名变量,则不允许任何人通过url访问您的文件

if ( ! isset($_SESSION['user_name']) || empty($_SESSION['user_name']) ) {
    header("Location: index.php");
}
是否已打开错误检查?将此项放在代码的顶部:

error_reporting(E_ALL);

在标题中使用绝对路径,而不仅仅是
index.php

<?php
    session_start();

    if(empty($_SESSION['user']))
    {
        header("Location: http://www.example.com/path_to_index/index.php");
    }
?>


因为如果
empty($\u SESSION['user'])
返回
true
,它将重定向到当前
index.php
页面并启动循环。

只需使用此代码,即可进入home.php! `
我更新了我的帖子。昨晚很晚了。我的逻辑是颠倒的。再看一次。如果未设置用户名变量,它现在将不允许任何人访问。这将阻止任何人直接使用url访问该文件。谢谢你的回答,我在进行更改时得到了答案。非常感谢你,我快疯了,不用客气。我注意到我的答案有点错。当我使用
strlen()
而不是
empty()
时,我删除了遗留下来的
>0
。此外,由于它现在正在工作,请将此帖子标记为已回答(复选标记)以关闭线程。
<?php
    session_start();

    if(empty($_SESSION['user']))
    {
        header("Location: http://www.example.com/path_to_index/index.php");
    }
?>
if (!isset($_SESSION['user_login_status']) || $_SESSION['user_login_status'] != 1){
    header("Location: index.php");
}