Еще одна часто возникающая при создании серьезных сайтов задача – авторизация пользователей. В этой статье я расскажу как сделать авторизацию на сайте с разграничением прав доступа с помощью PHP и базы MySQL.
Начнем с создания таблицы users в базе данных. Минимальное количество полей – 4:
- id (smallint) – уникальный идентификатор пользователя (unique, auto_increment).
- username (varchar(255)) – имя пользователя
- password (varchar(255)) – md5 хеш пароля
- rights (varchar(1)) – права пользователя
Итак таблица создана, далее нам понадобится сама форма для авторизации:
<form action="" method="post">
<input type="text" name="login" />
<input type="password" name="pass" />
<input type="hidden" name="login_add" value="login_add" />
<input type="submit" name="Submit" value="Вход" />
Скрытое поле будет использовано для определения была ли передана форма. Переходим к логике самого скрипта. В самом начале страницы где необходима авторизация запускаем сессии session_start(). Далее проверяем авторизован ли пользователь, если нет, то выводим форму авторизации, если пользователь ввел имя пользователя и пароль – проверяем есть ли такой пользователь и пароль, если нет – опять выводим форму, если да – выводим содержимое страницы – все просто…
<?php
session_start();
//подключаем функцию для проверки авторизации
include ‘authorization.php’;
if (isset($_POST['login_user'])) {
authorization($_POST['username'], $_POST['pass']);
}
//если пользователь не авторизован, выводим форму для авторизации
else if (!$_SESSION[‘auth’]) {
?>
<form action="" method="post">
<input type="text" name="login" />
<input type="password" name="pass" />
<input type="hidden" name="login_add" value="login_add" />
<input type="submit" name="Submit" value="Вход" />
<?php
}
?>
Так должен начинаться каждый файл, в котором необходима авторизация.
Теперь файл authorization.php:
function authorization($login, $password) {
//устанавливаем начальное значение авторизации
$user_login=FALSE;
//запрос к базе данных
$q="SELECT * FROM users WHERE login='$login'";
$pass=md5($password);
$auth=mysql_fetch_assoc(mysql_query($q));
//проверяем, совпадают ли пары логин-пароль введенные пользователем с теми что в таблице users
if ($login==$auth['login'] and $pass==$auth['password']) {
switch ($auth['rights']) {
//пользователь с правами администратора
case 'a':
$_SESSION['user']='a';
//ставим значение $_SESSION['auth'] TRUE, что соответствует входу зарегистрированного пользователя
$_SESSION['auth']=TRUE;
$_SESSION['user_id']=$auth['id'];
break;
//обычный пользователь
case 'u':
$_SESSION['user']='u';
$_SESSION['auth']=TRUE;
$_SESSION['user_id']=$auth['id'];
break;
}
$_SESSION['username']=$auth['login'];
$user_login=TRUE;
}
else if ($login!=$auth['login']){
$error_auth="Неверный логин";
$user_login=FALSE;
$_SESSION['auth']=FALSE;
}
else if (md5($password)!=$auth['password']){
$error_auth="Неверный пароль";
$user_login=FALSE;
$_SESSION['auth']=FALSE;
}
return $user_login;
}
Вот и все. Функция принимает в качестве обязательных параметров перменные $login и $password, возвращает перменную $user_login в значении TRUE если авторизация прошла успешно, и FALSE если нет. Стоит описать переменные, которые помещает функция в массив $_SESSION:
$_SESSION['user'] – права пользователя, a – администратор, u – простой пользователь.
$_SESSION['auth'] – TRUE или FALSE – прошла авторизация или нет.
$_SESSION['user_id'] – уникальный идентификатор пользователя – не обязательная переменная, иногда ее можно использовать в служебных целях, таких как учет записей добавленных пользователем, или время последнего редактирования записи этим пользователем.
Что дальше решать вам – где и как применять данную логику.