Все кто разрабатывает web сайты, рано или поздно сталкивается с такой задачей как авторизация и аутентификация пользователей, реализованная именно с помощью языка программирования, а не с помощью стандарта протокола http. Сегодня мы рассмотрим пример создания простой авторизации с использованием языка программирования PHP, а данные о пользователях будем хранить в базе MySQL.
Приведенный ниже способ является простым или как бы основой для создания нормальной авторизации, но его Вы вполне можете использовать, так как он достаточно хорошо работает, также Вы сами можете улучшить этот способ и внедрить у себя на сайте.
Данный способ основан на сессиях, но я здесь применяю и куки, для того чтобы браузер запоминал пользователя, который аутентифицировался прошлый раз, чтобы каждый раз не вводить логин, можно конечно хранить в куках и пароль, но это не безопасно, даже если он зашифрован. Для того чтобы сессия закончилась, просто закройте браузер и откройте заново.
Рекомендуем узнать подробнее, что такое
авторизация на PHP.
Создание формы авторизации
Теперь перейдем непосредственно к самой авторизации. Создайте файл с названием mylogin.html со следующим содержанием:
<?php
mysql_connect ("localhost", "root","");//пишите свои настройки
mysql_select_db("test") or die (mysql_error());//и свою бд
mysql_query('SET character_set_database = utf8');
mysql_query ("SET NAMES 'utf8'");
error_reporting(E_ALL);
ini_set("display_errors", 1);
session_start();//не забываем во всех файлах писать session_start
if (isset($_POST['login']) && isset($_POST['password'])){
//немного профильтруем логин
$login = mysql_real_escape_string(htmlspecialchars($_POST['login']));
//хешируем пароль т.к. в базе именно хеш
$password = md5(trim($_POST['password']));
// проверяем введенные данные
$query = "SELECT user_id, user_login
FROM users
WHERE user_login= '$login' AND user_password = '$password'
LIMIT 1";
$sql = mysql_query($query) or die(mysql_error());
// если такой пользователь есть
if (mysql_num_rows($sql) == 1) {
$row = mysql_fetch_assoc($sql);
//ставим метку в сессии
$_SESSION['user_id'] = $row['user_id'];
$_SESSION['user_login'] = $row['user_login'];
//ставим куки и время их хранения 10 дней
setcookie("CookieMy", $row['user_login'], time()+60*60*24*10);
}
else {
//если пользователя нет, то пусть пробует еще
header("Location: mylogin.html");
}
}
//проверяем сессию, если она есть, то значит уже авторизовались
if (isset($_SESSION['user_id'])){
echo htmlspecialchars($_SESSION['user_login'])." <br />"."Вы авторизованы <br />
Т.е. мы проверили сессию и можем открыть доступ к определенным данным";
} else {
$login = '';
//проверяем куку, может он уже заходил сюда
if (isset($_COOKIE['CookieMy'])){
$login = htmlspecialchars($_COOKIE['CookieMy']);
}
//простая формочка
print <<< html
<form action="mylogin.html" method="POST">
Логин <input name="login" type="text" value = $login><br>
Пароль <input name="password" type="password"><br>
<input name="submit" type="submit" value="Войти">
</form>
html;
}
?>
Примечание! Если вдруг у Вас отказывает работать парсер php, т.е. на экран Вам выводится сам код php, то у Вас просто на всего не включена обработка php в файлах html. Настройки делаются в файле конфигурации web сервера httpd.conf (если apache):
AddType application/x-httpd-php .php .html
В IIS в окне «Добавление сопоставления модуля» (Add Module Mapping) добавьте к *.php еще и *.html через запятую. Это если Вы делаете у себя дома на своем web сервере, а если Вы все это делаете у хостера, то Вам придется писать им и просить внести необходимые изменения, у некоторых хостеров они уже сделаны.
Код я прокомментировал, поэтому я думаю, что все должно быть понятно. Еще раз напоминаю во всех файлах, содержимое которых Вы не хотите показывать не авторизованным пользователям, необходимо писать session_start, ну и, наверное, на этом все. Если есть вопросы, задавайте в комментариях. Удачи!