Forum Webscript.Ru

Программирование => PHP => Тема начата: Lieto от 27 Апреля 2005, 17:36:45

Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 27 Апреля 2005, 17:36:45
Если Вы готовы бесплатно дать мне практический совет, относительно решения определённой практической задачи, пожалуйста, читайте ниже =)

Передо мной, стоит задача -- дать доступ к определённой странице, определённому логину с паролем.

( регистрацию я предварительно решил сделать через сендмеил т.к. логинов большое количество не предвидится )

Насколько я понимаю технологию она должна строиться следующим образом.

1. ПХП форма на главной странице запрашивает логин и пароль.
2. Эта же форма обращается к файлу на сервере в котором содержиться информация о соответствии логинов\\паролей определённым страницам и редиректит на персональную страницу данного логина.
3. Форма на странице логина проверяет пароль и либо даёт доступ, либо возвращает на заглавную. (или как-то так)

ПХП я знаю "отрывками", но если будет пример с минимальными пояснениями смогу разобраться.

Заранее благодарен за любую помощь =)

п.с. расчитываю на то, что с данным вопросом многие сталкивались и как минимум отошлют на подробный фаг по сабжу. Форма и технология я подозреваю достаточно широко используются.
Название: Регистрация \\ Авторизация.
Отправлено: Меняздесьдавнонет от 27 Апреля 2005, 18:49:31
http://phpclub.net/talk/showthread.php?s=&threadid=32810

правда, примеры устаревшие, но адаптировать несложно
Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 28 Апреля 2005, 01:19:03
Почитал, довольно непонятно, но уже что-то.

Меня интересует такая схема

юзер печатает логин и пассворд, скрипт сверяет его со списком

if юзер1 and пароль1 than load index1.htm else
if юзер2 and пароль2 than load index2.htm else
redirect dead.htm

Вы уж простите. Опыта программирования у меня не особо ) я так понимаю что если задать переменные то можно их потом сравнивать.
Ни у кого нет примера более близкого к моей реальности?

п.с. на пхпфаг пока не нашёл.
Название: Регистрация \\ Авторизация.
Отправлено: Меняздесьдавнонет от 28 Апреля 2005, 01:21:05
а чем тебя тот, который я дал, не устраивает?
Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 28 Апреля 2005, 01:48:34
2 РомикЧиф

а можно пояснение по Вашему скрипту?

$file="data.txt";
$fp=fopen($file, "r");
$auth_file=fread($fp, filesize($file));
fclose($fp);
if (!strstr($auth_file,$PHP_AUTH_USER.":".$PHP_AUTH_PW."\\n")) {
  header(\'WWW-Authenticate: Basic realm="Realm"\');
  header("HTTP/1.0 401 Unauthorized");
  echo  "Bad password";
  exit;
}

Скрипт вроде недлинный. Можете прокоментировать? -- что он собственно делает в случае если пароль и логин совпадают? Какие переменные нужно обозначить?
Как "это" внедрить в пустую веб-страницу? )

Благодарю =)
Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 28 Апреля 2005, 01:51:52
А где в данном скрипте (ниже) ссылка на этот дата.тхт или это два совершенно разных независимых скрипта авторизации?

session_start();
if ($_POST[\'user_name\']==\'user\' AND $_POST[\'user_pass\']==\'pass\') {
  $_SESSION[\'authorized\']=1;
  if (defined("SID") AND constant("SID")) $sid="?".SID; else $sid=\'\';
  header("Location: member.php$sid");
  exit;
}
?>
" method="POST">
Name:
 
Pass:
 



member.php
session_start();
if (empty($_SESSION[\'authorized\'])) {header("Location: auth.php");exit;}
?>
СЕКРЕТНАЯ ИНФА!!!
Название: Регистрация \\ Авторизация.
Отправлено: Меняздесьдавнонет от 28 Апреля 2005, 12:28:26
Цитировать
Lieto:
Можете прокоментировать? -- что он собственно делает в случае если пароль и логин совпадают?

в этом случае скрипт не делает НИ-ЧЕ-ГО.
Это означает, что если ПОД НИМ что-то написать, то это исполнится.
Цитировать
Lieto:
или это два совершенно разных независимых скрипта авторизации?

Да, это два независимых.
Во втором примере отсутствует код проверки паролей из файла. В нём зашита проверка только одного логина и пароля.
Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 28 Апреля 2005, 16:27:33
Благодарю ) Нашёл у себя самоучитель по ПХП и разобрался во многом.
И всё-таки так и не понял как адаптировать скрипт таким образом, чтобы после введения определённого логина и пароля (или группы логинов и паролей), давало доступ к определённой странице. (по типу почтовой системы). Мне необходимо, чтобы каждый авторизированный клиент получал доступ к своему хтмл-файлу.


Для тех, кто возможно зайдёт в эту тему с таким же вопросом как у меня, привожу текст, который многое для меня прояснил. Авторство к сожалению не знаю.

СЦЕНАРИЙ АВТОРИЗАЦИИ (авторизацию сессиями я счёл набиолее удобной)






Алгоритм сценария прост. После определения допустимости полученных от посетителя каким бы то ни было образом (вводом в форму или в диалоговое окно авторизации) логина и пароля открывается сессия и в ней регистрируется переменная - указатель на успешную авторизацию, которой присваивается определенное значение. На каждой странице "защищенной зоны" проверяется значение полученной с данными сессии этой переменной (а, как вы помните, берется оно не из отправляемых браузером посетителя данных, а из созданного во временной директории сервера файла с данными сессии - браузер посетителя сообщает лишь идентификатор этого файла), и если оно совпадает с обозначающим успешную авторизацию, то посетитель допускается к работе со страницей, если же нет - то доступ к странице не разрешается. На странице "выхода" из защищенной зоны располагается команда session_destroy ();, после выполнения которой идентификатор сессии "забывается" сервером и передача Сценарию переменной - указателя на успешную авторизацию более не происходит - до нового прохождения авторизации.
Начало сценария на странице проверки логина с паролем может быть таким:

foreach (file("passw/passwr") as $k)
{if (substr($k, 0, -2)=="$PHP_AUTH_USER $PHP_AUTH_PW")
{$rez=l;}}
if ($rez!=l) {Header("WWW-Authenticate: Basic realm=\\"Защищенная зона"\\""); Header("HTTP/1.0 401 Unauthorized");
...текст страницы, выдающейся посетителю в случае нажатия им кнопки "Отмена"...
exit,-}

или таким (если логин и пароль передаются из формы в переменных Slogin и Spass):

форма --
Логин:
 Пароль:
 


код --

foreach (file("passw/passwr") as $k)
{if (substr($k, 0, -2)=="$login $pass"){$rez=l;
if ($rez!=l) {...текст страницы, выдающейся посетителю в случае ввода неправильных логина и пароля ...
exit;}

В результате их выполнения нижеследующий текст сценария будет выполняться только в том случае, если введенные посетителем логин или пароль есть в файле логинов и паролей (имеющем в данном случае имя "passwr").
Продолжение же сценария довольно простое. Создаем сессию...

session_start();

...регистрируем переменную:

session_register("auth");

...и устанавливаем ей определенное значение - дабы потом его и проверять.

$auth=1;

Собственно, и все.

?>

Дальше следует текст страницы, которую посетитель должен увидеть сразу же после успешной авторизации.
Так как идентификатор сессии обычно сохраняется в cookie, то приведенный выше код должен стоять в самом начале страницы, чтобы сервер имел возможность работать с cookies, т. е. был бы в состоянии отправить cookie с идентификатором сессии браузеру посетителя. (Если браузер посетителя не принимает cookie, то идентификатор сессии будет автоматически присоединяться ко всем найденным на данной странице ссылкам на другие ресурсы сайта.)
На каждой странице "защищенной зоны", в самом ее начале нужно поставить код

if ($auth!=l)
{...текст страницы, выдающейся посетителю в случае попытки несанкционированного доступа...
exit;}

...и все, что после этого кода, будет выполнено и/или выдано посетителю только в том случае, если он успешно прошел авторизацию на первой странице. При заходе на страницу "защищенной зоны" браузер посетителя перешлет серверу cookie с идентификатором сессии, а сервер возьмет из своего временного хранилища значение всех переменных сессии и передаст их сценарию.
Страница выхода из "защищенной зоны" должна содержать код (если в файле php.ini установлен в 1 параметр session.autostart, то указывать команду session_start () на каждой странице, где используются переменные сессии или производятся действия с самой сессией, не обязательно).

session_start(); session_destroy(); ?>

После его выполнения для посещения страниц "защищенной зоны" вновь потребуется авторизация.
Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 29 Апреля 2005, 23:06:02
ВОПРОС

Вот допустим у меня есть форма

Логин:
 Пароль:
 


Она ссылается на ап.пхп. Как мне сделать, чтобы форма ссылалась на тот *логин*.пхп ? Т.е. для каждого логина был бы свой файл.
Название: Регистрация \\ Авторизация.
Отправлено: Croaker от 29 Апреля 2005, 23:12:35
Цитировать
Lieto:
для каждого логина был бы свой файл.


Зачем?! Как вы пришли к такому решению.
Название: Регистрация \\ Авторизация.
Отправлено: Lieto от 30 Апреля 2005, 00:15:29
Ну у меня в голове мыслительный процессы проходят, а как это реализовать я не знаю =)

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

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

Возможно я не очень стройно излагаю или чего-то не понял из примере, буду благодарен за помощь )
Название: Регистрация \\ Авторизация.
Отправлено: Fargus от 30 Апреля 2005, 11:06:23
Цитировать
Lieto:
Наиболее простым способом дать каждому пользователю доступ только к нужной ему информации -- создать для него страницу. (поскольку пользователей немного, то это оправдано).


Не оправдано. Если юзеров больше, чем 1, то разумнее написать 1 страницу и передавать туда переменную в виде id пользователя. Предварительно, естественно, при регистрации присваивать пользователям id.

А вообще, посоветую Вам прочитать книгу [ссылка на чудовищную книгу удалена. ]. Очень понятно и доходчиво все разжёванно. Эта книга гуляет по сети в виде pdf. Но рекомедую прикупить, она думаю станет Вашей настольной книгой.
Название: Регистрация \\ Авторизация.
Отправлено: Меняздесьдавнонет от 30 Апреля 2005, 13:06:19
Fargus не надо рекомендовать всякие глупости