Задать вопрос
pavlyk
@pavlyk
1С программист

Какая должна быть правильная авторизация на php?

Прочитал много разных статей, в итоге совсем запутался.
Подскажите какая должная быть самая простая но правильная авторизация на сайте.
Есть сайт в котором на index.php у меня 2 поля логин и пароль, когда пользователь вводит их и они подходят идет редирект на другой скрипт вот так
header("Location: main.php"); exit();
Идея в том что открыты для всех только index.php , а дальше редиректами уже пользователь ходит по всем остальным страницам.

Но только сейчас понял что сайт доступен без всякого пароля по ссылку site.ru/main.php
Попробовал закрыть все кроме index.php через .htaccess (планировал что из своего же скрипта пустит), но при редиректе так же не пускает.
Так же прочитал про метод установки в index.php
define('HIGHT', true);
и проверки в других скриптах
if(!defined('HIGHT')) die('access denied');
Но похоже что это работает только если подключать include , а не редиректить на другую страницу!?

Я правильно понимаю что в итоге у меня должны быть открыты для всех все скрипты(=страницы сайта в моем случае), но мне нужно в начале каждой страницы проверять , что пользователь авторизован (с помощью механизма сессий) и это единственный верный вариант?
Заранее спасибо.
  • Вопрос задан
  • 1384 просмотра
Подписаться 2 Оценить Комментировать
Решения вопроса 4
Exomode
@Exomode
Архитектор ПО
Лучше всего навигацию по сайту реализовывать через паттерн проектирования, например, самые классические MVC/HMVC или компонентные. Тогда у вас будет всего одна точка входа в систему и не придётся в каждом скрипте писать проверки, инклуды и тд.

Далее, касательно самой авторизации - тут тоже масса вариантов реализации, но самый минимальный и более-менее правильный вариант - организовать проверку на сессиях или куках, проверять методом наличие сессии или куки, если есть - пользователь авторизован, делать перенаправление со страницы авторизации на нужную, либо же динамически отдавать контент, в зависимости от того как у вас там спроектирована система. Если нет - отдать контент страницы авторизации или перенаправить на нее. SEO здесь так же влияет, если необходима индексация страницы авторизации, то только перенаправлять.

Чтоб сессии работали, ничего инклудить не обязательно, главное чтоб вначале скрипта всегда выполнялся session_start(). В итоге проверка отработает на всех ваших скриптах страниц, которые должны делать редирект в случае если пользователь не авторизован.
Ответ написан
@EverOne
R&D Management since 2011
Вам сюда для начала.
Ответ написан
Комментировать
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
php.net/manual/ru/session.examples.basic.php

Добавлю:
Закрыть можно через использование доп.расширения.
Например: file.inc.php и все, где есть .inc - можно закрыть в .htaccess

Однако, чаще закрывают через проверку константы, которая задаётся только в головном файле скрипта.

Также, можно настроить через .htaccess все обращения на один php-файл.
тогда и закрывать ничего не нужно будет.
Ответ написан
ThunderCat
@ThunderCat Куратор тега PHP
{PHP, MySql, HTML, JS, CSS} developer
Авторизация(любая) работает при ее использовании, легче всего организовать ее использование при единой точке входа и нормальной архитектуре(например мвц). Весь смысл - получить связь пользователя с правами и зафиксировать ее на время работы с сайтом. Далее в "закрытых" частях сайта эта связь должна быть подтверждена(прчитана сессия с ключем авторизации или токен из куки, не важно вообще). Обычно пришется простенький метод/функция типа isAuth() и получают ответ тру/фалс, далее по логике, выбрасывать на главную, давать страницу ощибки, кидать на авторизацию, короче от задачи зависит.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Arris
@Arris
Сапиенсы учатся, играя.
Не устаю рекламировать https://github.com/PHPAuth/PHPAuth
Сам пользуюсь (и приложил к нему руку).
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы