8 Окт
По просьбам читателей приведу самый примитивный пример авторизации с помощью AJAX. Почему примитивный? Потому что, если у вас нет навыков написания хорошего, защищенного скрипта авторизации на php+mysql, то этот пример не для вас. Зацикливаться на самой авторизации я не буду, ведь все мы знаем, что пользователей нужно хранить в базе данных с их зашифрованными паролями и IP адресами последнего входа…? У меня всё гораздо проще - users.txt файл в корне с синтаксисом: “пользователь = пароль” в несколько строк.
А шифрование и прочие навороты оставляю за вами :)
Начнем с самого простого:
1 2 3 4 5 6 7 8 9 10 11 12 | <html>
<head>
<script type="text/javascript" src="script.js"></script>
</head>
<body>
<div id="userarea">
<input type="text" name="username" id="username">
<input type="password" name="password" id="password">
<input type="submit" onclick="login(); return false;"></div>
<div id="userarea2"></div>
</body>
</html> |
Объясняю. Как видите, нам и форма не нужна (хотя если хотите, чтобы посетитель мог отослать данные по нажатию на кнопку enter, как ему привычнее, то следует добавить форму и использовать событие onSubmit). Два блока (userarea и userarea2). В первом будем хранить форму. Второй используем для вывода пользователю некой информации (неверный вход, добро пожаловать и т.д.).
Script.js мы рассмотрим позднее, т.к. сперва хочу показать, каким образом мы выдаем ответы на попытки авторизации.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | $username = $_POST["username"]; $password = $_POST["password"]; $users = file_get_contents("users.txt"); $users = explode("\n",$users); $auth = false; foreach($users as $userdata) { $userdata = explode("=", $userdata); if ($username == trim($userdata[0]) && $password == trim($userdata[1])) { $auth = true; break; } } if ($auth) { setcookie("username", $username, time()+3600); setcookie("password", $password, time()+3600); echo "200 " . $username; } else { setcookie("username", $username, time()-1); setcookie("password", $password, time()-1); echo "500"; } |
Первым делом считываем данные POST (вполне логично). Затем, открываем нашу “базу данных” пользователей и смотрим есть ли там такой набор (логин/пароль). Если есть, то $auth = true; Ну а дальше устанавливаем куки и выдаем ответ:
200 usernameВ случае верной авторизации, или
500В случае неверной ;)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 | function getXmlHttp() { var xmlhttp; try { xmlhttp = new ActiveXObject("Msxml2.XMLHTTP"); } catch (e) { try { xmlhttp = new ActiveXObject("Microsoft.XMLHTTP"); } catch (E) { xmlhttp = false; } } if (!xmlhttp && typeof XMLHttpRequest != 'undefined') { xmlhttp = new XMLHttpRequest(); } return xmlhttp; } function login() { var sUsername = document.getElementById("username").value; var sPassword = document.getElementById("password").value; userarea = document.getElementById("userarea"); userarea.style.display = 'none'; userarea2 = document.getElementById("userarea2"); userarea2.style.display = 'block'; userarea2.innerHTML = "loading..."; var xmlHttp; xmlHttp = getXmlHttp(); var httpParams = "username=" + sUsername + "&password=" + sPassword; xmlHttp.onreadystatechange = function() { if (xmlHttp.readyState == 4) { var response = xmlHttp.responseText; if (response.substring(0,3) == "200") { userarea2.innerHTML = "login successful. greetings, " + response.substring(3); } else { userarea2.innerHTML = "invalid login or password"; userarea.style.display = 'block'; } } } xmlHttp.open('POST', 'auth.php', true); xmlHttp.setRequestHeader('Content-type', 'application/x-www-form-urlencoded;'); xmlHttp.setRequestHeader('Content-length', httpParams.length); xmlHttp.setRequestHeader('Connection','close'); xmlHttp.send(httpParams); } |
Кто не знаком с функцией getXmlHttp(), прошу сюда: Введение в AJAX (XML). Дальше - функция login() будет вызываться по нажатию на кнопку вход. Считываем значения полей login и password (свойство value), шаманим с дивами (показываем “пожалуйста, подождите”).
На 33-й строке формируем параметры запроса, затем выставляем функцию на событие onreadystatechange. Здесь, в переменную response, помещаем весь ответ от скрипта auth.php. В условии проверяем первые три знака. Если 200, то авторизация прошла, и во второй див напишем пользователю приветствие. Ну а иначе, пишем неверный логин или пароль и возвращаем форму для входа.
С 51-й строки посылается сам запрос (обратите внимание - методом POST). Думаю ничего сверхестественного, если вы читали, например AJAX и XML: Shoutbox.
Дальше создаете базу данных пользователей, шифруете их пароли, делаете блокировку на час по 3-х кратной неверной авторизации, рисуете красивую форму, добавляете AJAX иконочки (ajaxload.info) и еще разок тестируете форму на безопасность.
Good luck ;)
Отзывов (7) на «AJAX авторизация»
04.11.2008 в 05:58
1
Спасибо за статью оказалась очень полезной.
01.01.2009 в 11:05
2
Очень полезная статья!
Спасибо!
03.01.2009 в 13:49
3
На здоровье ;)
05.01.2009 в 17:04
4
Почему когда выполняю запрос в IE6 то данные передаются по GET? как это исправить?
06.01.2009 в 00:18
5
B@c!fer, всё зависит от кода вашего…
06.01.2009 в 19:07
6
Подскажите, у меня возникают проблемы с IE7? это у меня руки кривые или есть нюансы. Сервер IIS6
06.01.2009 в 23:35
7
Дмитрий, какого рода проблемы? AJAX работает в браузере, независимо от сервера (Apache/ISS) так что дело скорее в настройках IE7, или код не совсем правильно написан…
Оставьте отзыв