|
Скрипт авторизации : Защиты директорий паролем
В один, прекрасный день мне потребовался скрипт авторизации - я начал искать подходящий из множества ничего толком стоящего я не нашёл, было принято решение помучится и научиться делать и это самому. То, что получилось я, решил показать вам (да я его храню как раритет), итак пускай и для вас это будет первым уроком:
Для начала создадим файл, в котором будет содержаться запрос к нашей базе на создание необходимой таблицы с пользователями db.sql и запишем в него следующие:
CREATE TABLE `users` (
`id` int(20) unsigned NOT NULL auto_increment,
`login` varchar(20) NOT NULL default '',
`password` varchar(20) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251;
Сохранили. Дальше пишем скрипт авторизации, создаём файл для начала test.php и запишем в него код, который мы разберём позже:
<?
session_start();
include "config.php";
$step = $_GET[pg];
$user = $_SESSION["username"];
if($step == "")
{
if($user == ''){
echo "<form method=\"POST\" action=\"test.php?pg=login\">
<input type=text name=login size=20><input type=text name=password size=20><input type=submit value=Submit name=B1></form>";
}else{
header("Location: test.php?pg=ok");
}
}
if($step == "login")
{
if($_POST[B1]){
$login=$_POST[login];
$password=$_POST[password];
if($login=="" | $password=="")
{
echo "Необходимо заполнять все поля";
}
else
{
$re=mysql_query("select * from users where login="{$login}" and password="{$password}"")or die(":-)");
$res=mysql_fetch_array($re);
if($res == "")
{
echo "Ошибка в указанных данных";
}
if($res > "")
{
$_SESSION["username"]=$res[login];
header("Location: test.php?pg=ok");
}
}
}else{echo "По-моему, сюда надо заходить через дверь…";}
}
if($step == "ok")
{
if($user == "")
{
header("Location: test.php");
}else{
echo "Привет ".$user."";
}}
?>
Начнём с санного начала:
session_start(); # Эта функция проверяет, существует ли идентификатор сессии, и, если нет, то создает его. Если идентификатор текущей сессии уже существует, то загружаются зарегистрированные переменные сессии.
То есть, говоря максимально понятно, если пользователь уже авторизован - данная функция несёт в себе его логин.
include "config.php"; # подключаем файл конфигураций - в котором должны быть данные для доступа к бд и "скрипт" по средствам которого должно происходить данное подключение, как пример (если нет файла) создаём файл config.php и вписываем:
<?
mysql_connect("хост бд", "имя пользователя бд", "пароль пользователя бд");
mysql_select_db("используемая бд");
?>
$step = $_GET[pg]; # это я думаю понятно практически каждому, а если нет, то быстро объясню: чтобы не писать постоянно $_GET[pg] мы будем писать постоянно $step.
$user = $_SESSION["username"]; # Значение $user будет содержать значение $_SESSION["username"]; - то есть логин пользователя.
Итак, первый шаг
if($step == "") # Данный скрипт будет выполнен если пользователь зашёл по ссылки на файл test.php
{
if($user == ''){ # Тут пользователю предстоит проверка на наличие сессии - если нет, то получит форму
echo "<form method=\"POST\" action=\"test.php?pg=login\">
<input type=text name=login size=20><input type=text name=password size=20><input type=submit value=Submit name=B1></form>";
}else{# Если он у нас авторизован - перекидываем его в акаунт (ну это я так - образно)
header("Location: test.php?pg=ok");
}
}
Шаг второй - авторизация
if($step == "login") # Сюда уже пользователь попадает после нажатия кнопки Submit, это test.php?pg=login
{
if($_POST[B1]){ # Проверяем с той ли формы брошен запрос на авторизацию (глупо наверно).
$login=$_POST[login]; # Что-то подобное мы уже обсуждали (ищем выше $step = $_GET[pg];)
$password=$_POST[password]; # То же, что и на строчку выше.
if($login=="" | $password=="") # Проверяем на факт внесения информации в оба поля.
{ # Если хоть одно из полей не заполнено - пользователь получит ясный ответ.
echo "Необходимо заполнять все поля формы";
}
else
{ # Если все поля заполнены, проверяем наличие указанной информации в нашей таблице.
$re=mysql_query("select * from users where login="{$login}" and password="{$password}"")or die(":-)"); # Улыбочку дорогие мои - доводящие до вывода ошибок специалисты.
$res=mysql_fetch_array($re);
if($res == "") # Если нет пользователя в базе или же указанный пароль не соответствует действительности - даём знать пользователя.
{
echo "Ошибка в указанных данных";
}
if($res > "")
{ # Если указанная информация существует - регистрируем сессию для данного пользователя и перекидываем его в акаунт.
$_SESSION["username"]=$res[login];
header("Location: test.php?pg=ok");
}
}
}else{ # Да кстати - если пользователь пришёл чтобы авторизоваться введя просто адрес страницы test.php?pg=login - мы ему объясним, что он не туда…
echo "По-моему, сюда надо заходить через дверь…";
}
}
Ну, вот и сделан шаг авторизации, и мы делаем шаг № 3 - в акаунт:
if($step == "ok") # это страница куда нас кидает после удачной авторизации.
{
if($user == "") # Если кто-то без авторизации сюда захочет зайти - мы вежливо перекинем его на страницу авторизации.
{
header("Location: test.php");
}else{ # Если пользователь авторизован и всё нормально - перед ним долгожданный акаунт.
echo "Привет ".$user.""; # уже здесь делаем и шаблон и все скрипты предназначенные для пользователей
}}
Вот такой вот не сложный механизм мне пришлось изобрести самостоятельно - когда это потребовалось, вскоре он мне стал не нужен, но сохранился на память - надеюсь, вам он пригодится и будет полезен.
Кстати - если вам необходимо подключить ещё какие страницы для авторизованных пользователей, делайте это, начиная скрипт страницы со следующих строк:
session_start();
$user = $_SESSION["username"];
if($user == '') # если заходит не авторизованный пользователь - его кинет на скрипт авторизации
{
header("Location: test.php");
}else{ # если пользователь авторизован - перед ним акаунт.
echo "Превед ".$user."";
}
Вот и всё, удачи!
|