php авторизация пользователей, cookies, принцип.
Принцип авторизации довольно прост. Но всегда возникают некоторые вопросы, по-поводу хэша в кукисах.
Рассмотрим основной принцип php авторизации на cookies.
Этапы авторизации:
- Получаем cookie, если он есть, проверяем авторизацию, назначаем переменную.
- Если авторизации нет, пишем форму входа.
- Получаем данные с формы, ищем их в MySQL таблице.
- Если нашли - назначаем cookies, перенаправляем на прошлую страницу.
- Если не нашли - выводим форму входа с текстом об ошибке.
Теперь более подробно, пусть у нас есть таблица пользователей в MySQL:
Поля - _id(int, Primary Key, auto_increment), login(varchar 255), password(varchar 32).
Почему пароль длинной 32 символа? Это длина стандартной хэш-функции md5. Больше байт выделять смысла нет.
Итак, пусть у нас есть пользователь:
_id = 1; login = admin; password = c8059e2ec7419f590e79d7f1b774bfe6
Пароль генерировался как md5('test');
Теперь выводим форму входа - <form action="" method="POST">, 2 поля input(name="login" и name="password") и submit.
После заполнения это формы и отправки скрипт получит 2 переменные.
$_POST['login'] и $_POST['password']. Как проверить - есть ли такой пользователь и соответствует ли пароль?
Все просто. mysql_query("SELECT * FROM `users` WHERE `login`='".mysql_real_escape_string($_POST['login'])."'");
Используем mysql_real_escape_string для экранирования спец-символов(исключаем возможность взлома).
$mas=mysql_fetch_array(); // получаем строку ответа
if($mas['password']==md5($_POST['password'])) { // сверяем хэш пароля из таблицы с хэшем полученного паролья
@setcookie('login',$mas['login'],0,'/'); // устанавливаем login cookie посетителя, логин юзера
@setcookie('hash',$mas['password'],0,'/'); // устанавливаем hash cookie посетителя, хэш пароля
header('location:'.$_SERVER['HTTP_REFERER']); // отправляем заголовок браузеру, для перенаправления на ту страницу, откуда была отправлена форма
exit;
}
Теперь можно, даже после подключения основного конфига - добавить проверку на авторизацию, допустим:
$auth=false; // переменная отвечающая за факт - авторизован юзер или нет
if ($_COOKIE['hash']&&$_COOKIE['login']) {
mysql_query("SELECT * FROM `users` WHERE `login`='".mysql_real_escape_string($_COOKIE['login'])."'");
$user=mysql_fetch_array(); // переменная с полями пользователя
if($user['password']==$_COOKIE['hash']) { // проверка совпадения хэша с паролем
$auth=true; // все хорошо - устанавливаем переменную, что пользователь авторизован
}
}
Все. Теперь можно проводить проверку авторизации. Разделять пользователей по группам, с разными правами. Главное понимать основы и принцип авторизации.
Для привязки к ip адрессу, к хэшу пароля можно добавлять ip и заного хэшировать md5. Даже если взломщик утащит кукис в таком случае - авторизоваться он не сможет.
Дата записи: 23.01.2011 13:50