Аутентификация с помощью PHP. Создание Личного кабинета

Опубликовал: Saturday, April 21, 2024 в категории HTML | Пока нет комментариев

В разд 4.4.13 мы уже рассматривали аутентификацию посетителей при по- мощи файла конфигурации сервера Apache .htaccess. В PHP существует свой способ аутентификации посетителей при помощи механизма сессий.

За механизм сессий в файле php.ini отвечают следующие директивы:

? session.save_handler определяет место хранения данных сеанса:

session.save_handler = files

? session.save_path задает путь к месту хранения данных сеанса. При установке мы изменили значение "/tmp" на "c:/php5/tmp" и создали папку tmp в каталоге c:/php5:

session.save_path = "c:/php5/tmp"

? session.use_cookies включает возможность использования cookies для механизма сессий. Если указано значение 1, то использование разрешено, если 0 — то запрещено:

session.use_cookies = 1

? session.name определяет имя сеанса:

session.name = PHPSESSID

? session.auto_start задает возможность автоматического запуска меха-

низма работы с сеансами. Значение 0 запрещает запуск:

session.auto_start = 0

? session.cookie_path определяет путь для установки в cookies сеанса:

session.cookie_path = /

? session.cache_expire устанавливает время жизни для кэшированных страниц сеанса в минутах:

session.cache_expire = 180

? session.cookie_lifetime определяет время жизни cookies на машине пользователя. Значение 0 указывает на то, что cookies будет удалено сра- зу после закрытия окна Web-браузера:

session.cookie_lifetime = 0

? session.use_trans_sid задает возможность присоединения PHPSESSID к URL-адресам. Если указано значение 1, то использование разрешено, ес- ли 0 — то запрещено:

session.use_trans_sid = 1

Работа с механизмом сессий осуществляется следующим образом:

1. Запускается сеанс.

2. Регистрируются переменные сеанса.

3. Используются переменные сеанса.

4. Удаляются переменные сеанса.

5. Сеанс закрывается.

Запустить сессию позволяет функция session_start():

session_start();

При запуске сессии на компьютер пользователя устанавливается cookies с именем PHPSESSID и значением вида db711b560810e7f90d67a4c8e6a873af. А в папке c:/php5/tmp создается временный файл с именем sess_db711b560810e7f90d67a4c8e6a873af.

Если прием cookies отключен в настройках Web-браузера, то к любой ссылке будет добавлена следующая строка:

?PHPSESSID=db711b560810e7f90d67a4c8e6a873af

Если на странице имеется форма, то внутрь будет автоматически добавлено скрытое поле:

<input type="hidden" name="PHPSESSID" value="db711b560810e7f90d67a4c8e6a873af" />

При первом запуске будут установлены cookies, а имя сессии будет добавле- но в URL-адреса для всех внутренних ссылок. Если cookies разрешено ис- пользовать, то в дальнейшем добавление к URL будет прекращено.

Поменять имя сеанса можно с помощью функции session_name():

session_name("Ivan");

session_start();

Теперь вместо имени PHPSESSID будет использоваться имя Ivan.

Зарегистрировать переменную внутри сеанса можно следующим образом:

$_SESSION["var1"] = 1;

Переменная сохраняется не в cookies пользователя, а в специальном файле на сервере. В cookies пользователя сохраняется только переменная с именем PHPSESSID и значением вида db711b560810e7f90d67a4c8e6a873af.

Проверить существование переменной можно с помощью функции isset():

if (isset($_SESSION["var1"])) {

echo "Переменная зарегистрирована";

}

Удалить переменную сеанса позволяет функция unset():

unset($_SESSION["var1"]);

Удалить сразу все переменные сеанса позволяет функция session_unset():

session_start(); // Запускаем сессию session_unset(); // Удаляем все переменные session_destroy(); // Удаляем идентификатор

По завершении сеанса сначала нужно удалить все переменные сеанса, а затем вызвать функцию session_destroy() для удаления идентификатора сеанса:

session_destroy();

Для примера создадим папку secure в папке C:\Apache2\htdocs. В этой папке создадим следующие файлы:

? index.php — содержит форму для ввода логина и пароля (листинг 5.60);

? secure.php — файл с информацией только для прошедших аутентифика-

цию пользователей (листинг 5.61);

? exit.php — для завершения сеанса (листинг 5.62);

? data.php — для хранения логина и пароля (листинг 5.63).

Листинг 5.60. Содержимое файла index.php

<?php require_once(‘data.php’);

$err = ”;

if (isset($_POST[‘login’]) && isset($_POST[‘passw’])) {

$_POST[‘passw’] = md5($_POST[‘passw’]);

if ($_POST[‘login’]===$enter_login &&

$_POST[‘passw’]===$enter_passw) {

session_start();

$_SESSION[‘sess_login’] = $_POST[‘login’];

$_SESSION[‘sess_pass’] = $_POST[‘passw’];

header(‘Location: secure.php’);

exit();

}

else {

$err = ‘<span style="color: red"><b>’;

$err .= ‘Логин или пароль введены неправильно!’;

$err .= ‘</b></span><br>’;

}

}

?>

<form action="index.php" method="POST">

<div align="center" style="padding: 250px 0 0 0">

<table border="0" cellspacing="0" width="200">

<caption><b>Вход в систему</b></caption>

<tr><td align="right"><b>Логин:</b></td>

<td><input type="text" name="login"></td></tr>

<tr><td align="right"><b>Пароль:</b></td>

<td><input type="password" name="passw"></td></tr>

<tr>

<td align="center" colspan="2">

<input type="submit" value="Войти">

</td></tr></table>

<?php echo $err; ?>

</div>

</form>

Листинг 5.61. Содержимое файла secure.php

<?php session_start(); require_once(‘data.php’);

if (isset($_SESSION[‘sess_login’]) && isset($_SESSION[‘sess_pass’])) {

if ($_SESSION[‘sess_login’]===$enter_login &&

$_SESSION[‘sess_pass’]===$enter_passw) {

echo "Информация для прошедших аутентификацию<br><br>\n";

echo "<a href=\"exit.php\">Выйти из системы</a>\n";

}

else {

header(‘Location: index.php’);

exit();

}

}

else {

header(‘Location: index.php’);

exit();

}

?>

Листинг 5.62. Содержимое файла exit.php

<?php session_start();

session_unset(); // Удаляем все переменные

session_destroy();

header("Location: index.php");

?>

Листинг 5.63. Содержимое файла data.php

<?php

$enter_login = "login";

$enter_passw = "202cb962ac59075b964b07152d234b70";

?>

В данном примере используется только один логин (login) и пароль (123). В реальной практике для каждого пользователя создается свой логин и па- роль. Для хранения учетных записей используется файл или чаще всего база данных. Если используется обычный файл (как в нашем случае), то он дол- жен содержать пароль в зашифрованном виде, а сам файл должен быть не- доступен через Интернет. В нашем примере файл data.php должен быть рас- положен в папке C:\php5\includes, а не в C:\Apache2\htdocs\secure.

В НИМ АНИЕ !

Так как мы устанавливаем заголовки ответа сервера, то перед функцией session_start() не должно быть никаких операторов вывода. Даже пус- тая строка перед открывающим PHP-дескриптором (<?php) вызовет ошибку.

Источник: Прохоренок Н. А. HTML, JavaScript, PHP и MySQL. Джентльменский набор Web-мастера. — 3-е изд., перераб. и доп. — СПб.: БХВ-Петербург, 2010. — 912 с.: ил. + Видеокурс (на CD-ROM) — (Профессиональное программирование)

Похожие посты:

Комментировать

Your email address will not be published. Required fields are marked *