0

当我有用户登录时,它会重定向到此页面:

<?php
session_start();

if (isset($_SESSION['LoggedIn'])){
     include "content.php";
}
else {
  echo "You must be logged in.";
}
?>

我刚刚意识到,如果人们登出,没有什么能阻止他们访问 content.php 页面。是的,它不会显示太多,但是处理这个问题的正确方法是什么?

4

4 回答 4

1

我认为您的设置倒退了。不要content.php从检查您是否登录的页面中包含,而是content.php包含包含检查的文件。该文件应该执行以下操作:

session_start();
if (!isset($_SESSION['LoggedIn']) {
    die("You must be logged in.");
}

另一种选择是保留您当前的结构,但放在content.phpWeb 根目录之外,因此无法直接使用 URL 对其进行寻址。

于 2013-11-10T04:00:08.347 回答
1

问题是您不应该只将一个文件/函数作为加载内容的网关。但是您需要为如何访问内容创建一个结构。所以这段代码:

<?php
session_start();
if (isset($_SESSION['LoggedIn'])){
  include "content.php";
}
else {
  echo "You must be logged in.";
}
?>

也许应该调整并添加到authentication.php行为如下的文件中:

<?php
session_start();
if (!isset($_SESSION['LoggedIn'])){
  echo "You must be logged in.";
  die();
}
?>

逻辑基本上是:这个用户登录了吗?好,在页面的其余部分做任何其他需要发生的事情。如果没有,请回显一条阻止他们的消息并通过 退出die()。然后在content.php- 以及您想要限制的任何其他页面 - 您加载authentication.php就像页面所做的第一件事一样:

<?php
require_once('authentication.php');
[...rest of `content.php` goes here...]
?>

而且你总是require_once在你想要限制的每个页面上这样做。

于 2013-11-10T04:06:17.670 回答
0

限制对任何页面的访问的唯一方法是在该页面上check授予该用户访问权限。这意味着要么添加

session_start();
if (isset($_SESSION['LoggedIn'])){

}
else {
  //header redirect;
}

到每一页,或者有一个函数/配置等类型的文件来运行你需要的所有函数,并在其中包含该标题。

我建议制作一些名为 init.php 的内容,并将其包含在每个页面中。在 init.php 中你可以有上面的代码,所以你不需要 session_start() 并且每次都检查登录。请记住,如果您的函数(例如 content.php 中的数据)位于dependentuser_id 上(意味着您有一个基于登录用户的自定义页面),那么您必须在运行任何依赖于它的函数之前包含 init.php .

例如你有一个functions.php文件

// 从 mysql 数据库中获取数据

函数say_hi() { $user_id = $_SESSION['user_id']

        $sql = "SELECT * FROM users WHERE `user_id` = '".$user_id."'";
        $result = $db->query($sql);

            while ($rows =$chaptersResult->fetch_assoc())
                {
                    $first_name = $rows['first_name'];
                    $last_name = $rows['last_name'];
                    $date_registered = $rows['date_registered'];

        }
          echo $first_name. " ".$last_name. "You registered on: ".$date_registered;

}

然后在 content.php 上,你想做一些你无法使用的事情,除非你的 inti.php(它将包含你的 $_SESSIONs 用于用户 ID 和其他东西)在你的 functions.php 之前被调用。

例如

内容.php

<?php

require_once 'init.php';
require_once 'functions.php';

echo say_hi();
?>

顺序确实很重要,随着您了解更多,您最终将拥有一个用于数据库连接等的配置文件。

于 2013-11-10T05:30:40.043 回答
0

在您的 else 语句中,请改用以下内容:

header("location:index.php");

基本上,您是说如果用户未登录,请将他们重定向到主页(或您指定的任何页面,如登录页面)。

于 2013-11-10T03:58:15.033 回答