Как правильно отображать контент после входа в систему?

0

Когда я зарегистрирую пользователя, он перенаправляется на эту страницу:

<?php
session_start();

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

Я только что понял, что нет ничего, что помешало бы людям просто перейти на страницу content.php, если они вышли из системы. Да, это не будет много показывать, но каков правильный способ справиться с этим?

  • 0
    Хотите ли вы скрыть какой-либо контент в content.php, если пользователь вышел из системы?
Теги:

4 ответа

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 на каждой странице, которую хотите ограничить.

1

Я думаю, что у вас есть что-то настроенное назад. Вместо того, чтобы включать content.php со страницы, которая проверяет, что вы вошли в систему, content.php файл content.php в файл, содержащий проверку. Этот файл должен делать что-то вроде:

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

Другой вариант - сохранить вашу текущую структуру, но поместите content.php за пределы корня веб-сайта, поэтому он не может быть напрямую адресован URL-адресом.

0

Единственный способ ограничить доступ к любой странице - check, предоставлен ли доступ для этого пользователя на этой странице. Это означает либо добавление

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

}
else {
  //header redirect;
}

на каждую страницу или с файлом функций /config и т.д., который выполняет все необходимые функции и включает в себя этот заголовок.

Я бы рекомендовал сделать что-то под названием init.php и включить это на каждую страницу. Внутри init.php у вас может быть код выше, поэтому вам не обязательно иметь session_start() и проверять каждый раз при входе в систему. Имейте в виду, что если ваши функции, такие как данные внутри content.php, dependent от user_id (что означает, что у вас есть пользовательская страница на основе пользователя, который входит в систему), тогда вы должны включить init.php, прежде чем запускать какие-либо функции, зависящие от что.

Например, у вас есть файл functions.php

//получать данные из mysql db

function 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 для идентификаторов пользователей и других вещей) называется ПЕРЕД вашим функциям.php.

например

content.php

<?php

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

echo say_hi();
?>

Заказ имеет значение, и по мере того, как вы узнаете больше, у вас в конечном итоге будет файл конфигурации для подключения к базе данных и т.д.

0

В своем заявлении else вместо этого используйте что-то вроде этого:

header("location:index.php");

В основном, вы говорите, если пользователь не вошел в систему, перенаправляйте их на домашнюю страницу (или любую другую страницу, указанную вами, например, страницу входа в систему).

  • 0
    Спасибо, я понимаю эту часть, но пользователь может просто зайти на www.example.com/content.php и показать страницу, но не войти в нее. Как это исправить?
  • 1
    @Cole - да, я думаю, что я говорю о том, что КАЖДАЯ из ваших php-страниц, которую вы хотите просматривать только тем, кто вошел в систему, должна включать, if not logged in, redirect to the login page код if not logged in, redirect to the login page в верхней части.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню