Сессии и авторизация в PHP

Kintaro

Новичок
Сессии и авторизация в PHP

Доброе время суток, уважаемые форумчане. Изучая php столкнулся с одной проблеммой, решением которой занимаюсь уже около недели. Прошу помочь разобраться со следующей задачей:
Значит имеется файл login.php содержащий форму для ввода логина и пароля соответственно. При успешной обработки сервером полученных данных, открывается доступ к файлу 1.inc. В случае несоответствия данных авторизации, пользователя выкидывает на страницу 2.inc. Оссобенностью данной проблеммы является то, что необходимо перекрыть несанкционированный доступ к файлу 1.inc. Предварительное решение - сессии. Осталось только понять, как это всё заставить работать с помощью сессий?
Вот скрипт обработки логина и пароля в файле login.php:
<?php

$login="1";
$password="1";
if ($login==$log&&$pass==$password){
session_name("logpass");
session_start();
$_SESSION['login']="1";
$_SESSION['pass']="1";
include_once('1.inc');
}else{
include_once('2.inc');
}
?>
Прошу вас обратить внимание на данный скрипт и подправить меня в случаях, если Я делаю что-то неправильно.
И собственно главный вопрос: Как зделать так, чтобы в файле 1.inc также происходила проверка логина и пароля, полученных из файла login.php? И в случае прямого обращения к файлу 1.inc в обход формы пользователя выкидывало скажем на страницу 2.inc?
Прежде чем задать данный вопрос я проверил поиском архив данного форума, просмотрел ФАК, а также искал информацию по данной теме в других источниках, но так и не нашёл ничего подходящего.
 

zerkms

TDD infected
Команда форума
Как зделать так, чтобы в файле 1.inc также происходила проверка логина и пароля, полученных из файла login.php?
в 1 достаточно проверить значение флажка $_SESSION['is_logged_in'], который ты заблаговеременно в файле, отвечающем за аутентификаицю, установишь в значение true
 

zerkms

TDD infected
Команда форума
[algorithm]
начало скрипта
если данные в суперглобале $_POST есть, то:
проверить пароль и логин
если верно - установить флажок в true
сделать чтото
если не верно
- сделать чтото

если данных в суперглобале $_POST нет, то:
отрисовать форму
[/algorithm]

переведи этот псевдокод на пхп и возрадуйся ;)
 

Фанат

oncle terrible
Команда форума
для файла, подключаемого инклюдом, сессии для авторизации нужны, как кошке вертолёт.

просто делай обычную переменную в скрипте, а в 1.инк её проверяй
 

Kintaro

Новичок
Дык как же поступать? В смысле что правильнее? способ фаната или zerkms'a?
 

eXtreme

Новичок
В файле login.php определяешь константу:

define('IN_MY_SCRIPT', true);

А в остальных файлах проверяешь:

if (!defined('IN_MY_SCRIPT')) die('Прямой доступ к этому файлу запрещён!');

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

zerkms

TDD infected
Команда форума
Kintaro
выбор в любом случае за тобой...

абсолютно правильных решений не существует
 

Фанат

oncle terrible
Команда форума
Kintaro
на чём правильнее ездить - на Рено или на Пежо?
это к вопросу об осмысленности твоего вопроса.

Способ zerkms-а (а точнее - твой собственный) - с сессиями - подходит для правильной авторизации. Когда человек, один раз введя пароль, потом перемещается по сайту, и может видеть запароленные страницы.

Мой же способ делает то, что ТЫ НАПИСАЛ.
То есть, ввели пароль - заинклюдили файл.
ушли с этой страницы, потом вернулись - вводить снова.

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

Ну, и ещё, мой способ проще гораздо. А тебе пока нужно учиться на простых примерах. Поскольку ты всё равно не понимаешь, что происходит, когда ты совершаешь те или иные действия. А понимать нужно обязательно
 

Kintaro

Новичок
eXtreme
В файле login.php определяешь константу:

define('IN_MY_SCRIPT', true);

А в остальных файлах проверяешь:

if (!defined('IN_MY_SCRIPT')) die('Прямой доступ к этому файлу запрещён!');
Скрипт не работает так как должен. Т.е. после проверки константы в файле 1.inc он загружает её независимо от введённых данных и только после выдаёт "Прямой доступ к этому файлу запрещён!"

Сейчас попробую остальные способы.
 

eXtreme

Новичок
эээ, ты уверен что
if (!defined('IN_MY_SCRIPT')) die('Прямой доступ к этому файлу запрещён!');
стоит перед всеи остальным кодом? и... может стоит поменять расширение .inc на .php и почитать учебник по PHP? :)
 

Kintaro

Новичок
эээ, ты уверен что
if (!defined('IN_MY_SCRIPT')) die('Прямой доступ к этому файлу запрещён!');
стоит перед всеи остальным кодом?
Уверен. Скрипт файла 1.inc начинается со строк:
<?php
if (!defined('IN_MY_SCRIPT'))
die('Прямой доступ к этому файлу запрещён!');
?>

Только что ещё раз проверил. На счёт учебника, с радостью бы почитал, да вот проблемма, данная тема не освещается должным образом ни в одном издании. По крайней мере мне ещё не встречались.

-~{}~ 23.07.06 00:15:

Фанат
Вот такая штука происходит:
При загрузки файла login.php и корректного ввода данных, как и пологается загружается файл 1.inc;
При прямом обращении к файлу 1.inc почемуто тоже загружается файл 1.inc (при этом нету даже и намёка на словосочетание "Прямой доступ к этому файлу запрещён!");
И ещё одно. При написании кода, Я пользуюсь программой Zend Studio и если чекнуть файл 1.inc отладчиком, а затем просмотреть результат в браузере, то на белом чистом листе видна надпись "Прямой доступ к этому файлу запрещён!"-только что узнал об этом.
Что всё это может означать? Я запутался...
 

maxru

МИФИст
Фанат
поскольку я параноик, то проверяю пароль и логин кажный раз 8) и другим советую.
 

eXtreme

Новичок
Ну не может быть, такие вещи должны у всех одинаково работать. Т.е. код следующий:

Файл login.php начинается со строки
PHP:
<?php define('IN_MY_SCRIPT', true); ?>
Затем идёт проверка логина и пароля и include();

А файлы 1.inc и 2.inc начинаются со строки
PHP:
<?php if (!defined('IN_MY_SCRIPT')) die('Прямой доступ к этому файлу запрещён!'); ?>
Если всё так, но код не работает, значит сервер не интерпритирует файлы с расширением .inc как PHP-файлы. Переименуй 1.inc и 2.inc в 1.inc.php и 2.inc.php или перенастрой Web-сервер.
 

Kintaro

Новичок
eXtreme
Большое спасибо! Всё работает :)
Переименовал файлы inc в php и никаких проблем :)
Спасибо запомощь.

И было бы совсем классно, если бы вы научили меня пользоваться способом через сессии. Так сказать для умственного развития.

Спасибо всем кто решил помочь мне с данной проблеммой.
 
Сверху