Web Developer On1x.com Игры как увлечение Видео–игры как хобби и увлечение. Новости игровой индустрии. Блог про видео–игры.
Dark Souls 2 видео игрового процессаDiablo 3 Reaper of Souls рецензия, стоит ли вернуться в игрувидео-трансляции по играм

php авторизация пользователей, cookies, принцип.

Принцип авторизации довольно прост. Но всегда возникают некоторые вопросы, по-поводу хэша в кукисах.

Рассмотрим основной принцип php авторизации на cookies.

Этапы авторизации:

  1. Получаем cookie, если он есть, проверяем авторизацию, назначаем переменную.
  2. Если авторизации нет, пишем форму входа.
  3. Получаем данные с формы, ищем их в MySQL таблице.
  4. Если нашли - назначаем cookies, перенаправляем на прошлую страницу.
  5. Если не нашли - выводим форму входа с текстом об ошибке.

Теперь более подробно, пусть у нас есть таблица пользователей в 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
Собственные проекты:
GameCommunity.ru, GameSocial.Net (TV), ART-Talk.ru, Дград.инфо
On1x blog
my ip