4 Способы
авторизации пользователя.
Переменные session,
cookies.
Вы наверняка заметили
некоторое «неудобство» при написании программ на
php.
Все используемые переменные теряются и их необходимо передавать от страницы
к странице при помощи средств
HTML.
Неужели нельзя один раз объявить переменную и затем использовать её на любой
странице? Решение есть, для этого используются методы
SESSION
и
COOKIES.
SESSION
Эти переменные хранятся
в памяти сервера. Для пользования ими клиент (пользователь) должен создать
сессию, тогда ему присваивается уникальный идентификатор, который будет
храниться у клиента и сервера (иначе как сервер сможет отличить клиентов
друг от друга ?). При каждом соединении клиент отправляет серверу
идентификатор сессии и получает возможность в отведенной ему области памяти
создавать и хранить переменные. Сессия закрывается тогда, когда закрывается
окно браузера, в котором была создана эта сессия. То есть пользователь может
переходить на другие страницы и даже сайты, может прерывать связь с
Интернетом, но сессия закроется только когда он закроет окно браузера. Но не
стоит забывать, что на сервере может задаваться время жизни сессии, и если
клиент в течении некоторого времени не обратился к серверу, то сессия и все
данные в ней уничтожаются. Как правило время жизни сессии составляет от
нескольких минут до получаса, что является достаточным для комфортной
работы.
Для использования
переменных сессии необходимо:
·
создать сессию – команда
session_start();
начинает новую или продолжает существующую сессию, в любом случае необходимо
разместить эту команду на каждой странице, где планируется использование
переменных сессии перед их вызовом.
·
зарегистрировать переменную
сессии – команда
session_register(‘имя_переменной’);
регистрация необходима только
перед первым использованием переменной, для создания в памяти сервера
области для хранения данных. При повторной регистрации этой же переменной,
данные будут потеряны.
·
использование переменных -
$_SESSION[‘имя_переменной’];
Таким образом можно обращаться с переменной сессии, как с обычной
переменной. Переменная сессии является скалярной и не имеет типов (не надо
различать строковые, числовые и тп.)
Пример использования
сессии:
1.
session_start();
2.
session_register('var_1');
3.
session_register('var_2');
4.
$_SESSION['var_1']=123;
5.
$_SESSION['var_2']=”строка_1”;
В строке 1 –
регистрация и старт сессии, строки 2-3 – регистрация переменных, строки 4-5
использование переменных.
Повторюсь, что
переменные сессии необходимо регистрировать только один раз за время
использования данной сессии, при последующем обращении (например на другой
странице) программа будет выглядеть так:
1.
session_start();
2.
echo $_SESSION['var_1'];
3.
echo $_SESSION['var_2'];
4.
$_SESSION['var_1']=456;
5.
$_SESSION['var_2']=”строка_2”;
строка 1 – старт
сессии, строки 2-3 – вывод на страницу значений переменных сессии, строки
4-5 – присвоение переменным новых значений.
COOKIES
Переменные
cookies
– подобно переменным сессии позволяют хранить данные при переходе от одной
страницы к другой, но в отличие от них, они хранятся не в памяти сервера, а
в виде файлов на компьютере пользователя. Достоинство
cookies
в том, что они не теряются после закрытия окна браузера, а сохраняются в
соответствующей директории браузера. И при последующем посещении сайта, даже
через несколько дней, эти данные можно использовать. Недостатки, же их
заключаются, в том, что файлы, в которых хранятся данные
cookies
могут быть похищены злоумышленником, и использованы им. В этом случае
программа на сервере не сможет отличить один компьютер от другого, поскольку
сервер может получить только название переменной и её значение. Также
злоумышленник может изменить значение переменной
cookies,
поскольку данные хранятся в незашифрованном виде. Шифрование данных не
спасет ситуацию, поскольку методом перебора можно расшифровать любую
информацию. Ещё одним недостатком является то, что у многих пользователей, в
целях безопасности, отключена поддержка
cookies
в браузере. Это делает невозможным их использование. В таком случае
необходимо предусматривать резервный вариант с использованием сессий.
PHP прозрачно
поддерживает HTTP cookies. Вы можете установить cookies при помощи функций
setcookie(). Cookies являются частью HTTP-заголовка, поэтому setcookie()
должна вызываться до любого вывода данных в броузер. Любые cookies,
отправленные серверу броузером клиента, будут автоматически преобразованы в
переменные PHP, подобно данным методов GET и POST.
Работа с
cookies
осуществляется просто:
установить
cookies
- setcookie(‘имя_переменной’, значение переменной);
использовать
cookies
– $_COOKIE["имя_переменной"];
или эквивалент
$HTTP_COOKIE_VARS["имя_переменной"];
пример:
установка
cookies
setcookie ("var_1", 1234);
setcookie ("var_2", “привет”);
использование
echo
$_COOKIE[‘var_1’];
echo
$_HTTP_COOKIE_VARS [‘var_2’];
РЕЗЮМЕ
Сессии следует
использовать при авторизации пользователей и для хранения секретной
информации, а cookies
допустимо использовать для
запоминания настроек пользователя (например для обеспечения возможности
персональной настройки приватной части веб-страницы, как на некоторых
почтовых сервисах) или для упрощения авторизации, когда сервер «узнает»
пользователя и подставляет его логин в соответствующее поле, и пользователю
остается только ввести пароль.
АВТОРИЗАЦИЯ
ПОЛЬЗОВАТЕЛЯ МЕТОДОМ SESSION.
Авторизация
пользователей осуществляется для ограничения доступа к веб-страницам.
Например, в гостевой книге сообщение может оставить любой посетитель, а
осуществлять редактирование и удаление сообщений может только администратор
ресурса. Каким образом ограничить доступ к веб-странице? Вот один из
способов :
Пусть у нас имеются две
страницы login.php и pagе.php. На первой осуществляется ввод логина и пароля
пользователя в поля формы и отправка этих данных на вторую страницу при
нажатии кнопки submit.
На второй странице производится сравнение введенных данных с настоящими. Они
могут храниться как в самой программе в виде констант так и браться из базы
данных, если пользователей большое количество. Если проверка прошла успешно,
то выполняется программа размещенная на этой странице, а если введенные
данные оказались неверными, то осуществляется принудительный переход на
другую страницу (в нашем случае это возврат на страницу ввода данных). Если
пользователь перешел на страницу
page.php
не со страницы ввода пароля
login.php,
а просто набрал в строке адреса “www.mysite.com/page.php”
или с другой страницы, не предусматривающей ввода пароля, то при проверке
правильности данных, он будет принудительно переадресован на страницу ввода
пароля.
Часто бывает, что
ограничение доступа необходимо установить на несколько страниц или
переходить на одну и ту же страницу несколько раз. В этом случае потребуется
ввод данных при каждой загрузке страницы. Для того чтобы этого избежать,
можно использовать переменные сессии.
Более правильным будет
проводить проверку пароля только один раз при его вводе и записывать в
переменные сессии только его логин. В дальнейшем необходимо просто проверять
существует ли данная переменная или нет. Кроме этого можно разграничить
пользователей по правам, установив переменную «уровень доступа».
Инструменты, при помощи
которых это можно выполнить достаточно просты: для ввода данных используются
формы; для передачи пароля и логина на страницу проверки логично
воспользоваться методом
POST; проверку осуществить при помощи
условия например:
1.
$login=”Вася”;
2.
$password=”1234”;
3.
if ($_POST[‘login’]= =$login AND $_POST[‘password’]= =$password)
4.
{
5.
//
выполнение программы
6.
}
7.
else
8.
{
9.
//
принудительный переход
10.
};
принудительный переход
осуществляется при помощи команды header("Location: путь_ к_странице");
например:
header("Location: http://www.mysite.com/login.php");
ВНИМАНИЕ: слово Location
пишется с заглавной буквы затем идёт двоеточие, а затем после пробела путь к
веб-странице.
Эта команда должна быть
выполнена до вывода информации в браузер (использование
echo,
тэгов header,
meta,
любых слов и пробелов).
Екатеринбург 2005г. Найденко Владимир
|