Приднестровская поддержка XOOPS
В разд Защита содержимого папки паролем мы уже рассматривали аутентификацию посетителей при помощи файла конфигурации сервера 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 — содержит форму для ввода логина и пароля (листинг 60);
□ secure.php — файл с информацией только для прошедших аутентификацию пользователей (листинг 61);
□ exit.php — для завершения сеанса (листинг 62);
□ data.php — для хранения логина и пароля (листинг 63).
Листинг 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>
Листинг 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();
}
?>
Листинг 62. Содержимое файла exit.php
<?php
session_start();
session_unset(); // Удаляем все переменные
session_destroy();
header("Location: index.php");
?>
Листинг 63. Содержимое файла data.php
<?php
$enter_login = "login";
$enter_passw = "202cb962ac59075b964b07152d234b70";
?>
В данном примере используется только один логин (login) и пароль (123). В реальной практике для каждого пользователя создается свой логин и пароль. Для хранения учетных записей используется файл или чаще всего база
данных. Если используется обычный файл (как в нашем случае), то он должен содержать пароль в зашифрованном виде, а сам файл должен быть недоступен через Интернет. В нашем примере файл data.php должен быть расположен в папке C:\php5\includes, а не в C:\Apache2\htdocs\secure.
Отправитель | Нити |
---|
8 пользователь(ей) активно (3 пользователь(ей) просматривают Инструкции)
Участников: 0 Гостей: 8 далее... |