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