Главная · Статьи · Файлы · Фото галерея · Видео онлайн
Библиотека
По авторам
По жанрам
Поиск по названию
Навигация
Главная
Статьи
Файлы
Обратная связь
Фото галерея
Видео онлайн
Поиск

Работа
Заказать сайт или программу

Примеры работ
Последние статьи
Технология уничтожения
«Мы – русские»
Ф.М. Достоевский - Д...
Европа против России...
Первые английские ко...
Reklama

Урок 9. Регистрация и авторизация пользователей
Ну вот и добрались до регистрации пользователей и созданию

закрытой части сайта.





Сегодня для этой цели мы используем сессии. Вариант с

использованием кук мы рассмотрим на следующей неделе.






Мой вариант скрипта лежит тут



http://allmustdie.citadelchaos.ru/uroki/6






на первой странице находится форма для авторизации зарегенных

пользователей и ссылка на форму для регистрации.






зарегистрированный пользователь введя пароль попадает в закрытую

зону сайта. если попытаеться войти в закрытую зону напрямую то

не получится



http://allmustdie.citadelchaos.ru/uroki/6/member.php













собственно скипт состоит из нескольких файлов


func.php - библиотека наших функций


index.php - начальная страница


login.php - авторизация пользователей


member.php - закрытая часть сайта



reg.php - форма для регистрации


reg_new.php - внос нового юзера в базу


user.dat - база юзеров





для php файлов права поставте 755, для user.dat 666





 






теперь разберем содержимое файлов


 












func.php - библиотека наших функций






 







цитата




<?


session_start();









//проверка правильности заполнения поля е-мейл





function email_test($email)


{


if(preg_match("/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/",


$email))


return true;


else


return false;





}









//внос в базу нового юзера





function register($name,$email,$password)


{


$pass=md5($password);



$all_users = file("user.dat");


foreach($all_users as $user_line)


{


$user_arr = explode("|", $user_line);






if(strcasecmp($user_arr[0],$name)==0){ msg("error",

"Ошибка!!!", "Пользователь с именем $name уже

зарегистрирован!", "javascript:history.go(-1)"); }


}



$old_db = file("user.dat");


$new_db = fopen("user.dat", "w");


fwrite($new_db,"$name|$pass|$email|\n");



foreach($old_db as $old_db_line){


$old_db_arr = explode("|", $old_db_line);


fwrite($new_db,"$old_db_line");


}


fclose($new_db);









echo "Пользователь зарегистрирован!";


}








//проверка совпадения пароля1 и пароля2 + проверка длины


пароля





function pass_test($pass1,$pass2)


{


if(strcasecmp($pass1,$pass2)<>0){ msg("error", "Ошибка!!!",


"Пароли не совпадают!", "javascript:history.go(-1)"); }





if(strlen($pass1)<6 || strlen($pass1)>20){ msg("error",

"Ошибка!!!", "Длина пароля должна быть между 6 и 20


символами!", "javascript:history.go(-1)"); }





}





//вывод сообщения на экран






function msg($type, $title, $text, $back=FALSE){


echo"<table border=0 cellpading=0 cellspacing=0 width=100%

height=100%><tr><td >$text";


if($back){



if($type=="yeslog")


echo"<br /><br> <a href=\"$back\">Для входа в закрытую зону

нажмите тут.</a>";



else


echo"<br /><br> <a href=\"$back\">Для возврата нажмите

тут.</a>";



}


echo"</td></tr></table>";


exit();


}






//проверка авторизации


function check_user()


{


global $valid_user;


if(session_is_registered("valid_user"))



echo $valid_user,"! ";


else


msg("error", "Ошибка!!!", "Вы не авторизированны!",


"index.php");


}


?>


 











session_start();


запускаем сессию. поидее надо эту функцию вызвать в каждом нашем

файле. но мы в каждом файле загружаем с помощью include файл

func.php. и потому вставит тут мы просто экономим место и время.








 








цитата




//проверка правильности заполнения поля е-мейл





function email_test($email)



{


if(preg_match("/^[\.A-z0-9_\-]+[@][A-z0-9_\-]+([.][A-z0-9_\-]+)+[A-z]{1,4}$/",

$email))


return true;


else



return false;





}


 










как и в гостевой - тут мы проверяем соответсвие емейла маске и


по результатам проверки функция возвращает значения. true - если

проверка пройдена. false- если проверка не прошла.





 







цитата





//внос в базу нового юзера





function register($name,$email,$password)


{


$pass=md5($password);


$all_users = file("user.dat");



foreach($all_users as $user_line)


{


$user_arr = explode("|", $user_line);





if(strcasecmp($user_arr[0],$name)==0){ msg("error",


"Ошибка!!!", "Пользователь с именем $name уже

зарегистрирован!", "javascript:history.go(-1)"); }


}


$old_db = file("user.dat");



$new_db = fopen("user.dat", "w");


fwrite($new_db,"$name|$pass|$email|\n");


foreach($old_db as $old_db_line){


$old_db_arr = explode("|", $old_db_line);



fwrite($new_db,"$old_db_line");


}


fclose($new_db);








echo "Пользователь зарегистрирован!";



}


 










$pass=md5($password); - мы шифруем пароль с помощью функции md5.

эта функция создает хеш пароля. расшифровать такой пароль

невозможно. взлом возможен только перебором.






$all_users = file("user.dat");


foreach($all_users as $user_line)


{


$user_arr = explode("|", $user_line);






if(strcasecmp($user_arr[0],$name)==0){ msg("error", "Ошибка!!!",

"Пользователь с именем $name уже зарегистрирован!",

"javascript:history.go(-1)"); }



}


открываем файл м проверяем не был ли такой юзер зареген ранее





$old_db = file("user.dat");


$new_db = fopen("user.dat", "w");



fwrite($new_db,"$name|$pass|$email|\n");


foreach($old_db as $old_db_line){


$old_db_arr = explode("|", $old_db_line);


fwrite($new_db,"$old_db_line");



}


fclose($new_db);


считываем файл. потом отрываем файл на запись. записываем нового

юзера и потом записываем старых. закрываем файл








//проверка совпадения пароля1 и пароля2 + проверка длины пароля






function pass_test($pass1,$pass2)


{


if(strcasecmp($pass1,$pass2)<>0){ msg("error", "Ошибка!!!",

"Пароли не совпадают!", "javascript:history.go(-1)"); }






if(strlen($pass1)<6 || strlen($pass1)>20){ msg("error",

"Ошибка!!!", "Длина пароля должна быть между 6 и 20 символами!",

"javascript:history.go(-1)"); }






}





проверяем что бы при регистрации совпадали введый пароль и

повтор пароля. + проверяем что бы пароль был длиной от 6 до 20

символов.






//вывод сообщения на экран





function msg($type, $title, $text, $back=FALSE){


echo"<table border=0 cellpading=0 cellspacing=0 width=100%

height=100%><tr><td >$text";



if($back){


if($type=="yeslog")


echo"<br /><br> <a href=\"$back\">Для входа в закрытую зону


нажмите тут.</a>";


else


echo"<br /><br> <a href=\"$back\">Для возврата нажмите


тут.</a>";


}


echo"</td></tr></table>";


exit();



}





функция вывода сообщения на экран. в зависимости от $type

сообщения будут разные. $back=FALSE говорит о том что при

получении переменных функция может не получить эту переменную и

тогда ее значение по умолчанию будет FALSE. если же переменная


передана то это будет ссылка для перехода.





function check_user()


{


global $valid_user;


if(session_is_registered("valid_user"))



echo $valid_user,"! ";


else


msg("error", "Ошибка!!!", "Вы не авторизированны!",


"index.php");


}





эта функция проверяет авторизирован ли пользователь пытающийся

зайти в закрытую зону сайта


session_is_registered("valid_user") - проверяет созданали в


сессии переменная valid_user и какое значение она имеет. эту

перевенную мы создаем при авторизации. и потому прямой заход в

закрытую зону не удасться.








index.php - начальная страница






 







цитата




<?


include("func.php");






?>


<h2>Вход</h2>


<form method="POST" action="login.php">



<table border="0" cellpadding="0" cellspacing="0"

style="border-collapse: collapse" bordercolor="#111111"


width="33%" id="AutoNumber1">


<tr>


<td width="40%" bgcolor="#C0C0C0">Имя</td>



<td width="60%" bgcolor="#C0C0C0"><input type="text"

name="namelog" size="20"></td>



</tr>


<tr>


<td width="40%">Пароль</td>


<td width="60%"><input type="password" name="passlog"


size="20"></td>


</tr>


</table>


<p><input type="submit" value="Войти" name="B1"></p>



<p><a href="reg.php">Регистрация</a></p>


</form>


 











первым делом мы загружаем файл с функциями (за одно создаем

сессию - напомню она создается в файле func.php)


далее идет форма за авторизации и ссылка на форму для

регистрации новых юзеров.


при авторизации форма пересылает нас на файл login.php. туда же

методом POST передаются введенные данные. и потому значения


логина и пароля хранятся в переменных $HTTP_POST_VARS["namelog"]

и $HTTP_POST_VARS["passlog"].





login.php - авторизация пользователей


 








цитата




<?





include("func.php");






$all_users = file("user.dat");


foreach($all_users as $user_line)


{


$user_arr = explode("|", $user_line);






if($user_arr[0]==$HTTP_POST_VARS["namelog"])


{


if($user_arr[1]==md5($HTTP_POST_VARS["passlog"]))


{



echo $valid_user=$HTTP_POST_VARS["namelog"];


session_register("valid_user");


msg("yeslog","Авторизация","Авторизация прошла успешно!",


"member.php");


}


else


msg("error","Авторизация","Пароль пользователя $user_arr[0]


неверен!", "javascript:history.go(-1)");


}


else


msg("error","Авторизация","Ошибка авторизации! Пользователь


необнаружен!", "javascript:history.go(-1)");





}





?>






 







введеные данные сравниваются с данными из базы.


причем введенны пароль хранящийся в $HTTP_POST_VARS["passlog"]

мы шифруем md5($HTTP_POST_VARS["passlog"]) и уже в таком виде


сравниваем с сохраненным паролем.


в зависимости от результатов проверки мы получим разные

результаты.


проверяем совпадение введенного логина с базой. если не

совпадает то об этов сообщается. если совпало то проверяет у

данного пользователя пароль. если не совпал то сообщает об этом.


совпало то сообщается об успешной авторизации и разрешается вход

в закрытую часть сайта.


так же создаем переменную сессии


$valid_user=$HTTP_POST_VARS["namelog"];


session_register("valid_user");



она получает значение равное введенному логину





member.php - закрытая часть сайта


<?





include("func.php");



if($act=='exit')


{


session_unregister("valid_user");


session_destroy();


}






check_user();


echo "Вы вошли в закрытую зону<br><br><br>";


echo "<a href='member.php?act=exit'>Выход</a>";



?>





check_user(); - вызывает фукцию для проверки пройдена ли

авторизация





echo "<a href='member.php?act=exit'>Выход</a>"; - ссылка на


выход из закрытой зоны. в алресной строке заадается переменная

act. если она равна exit то происходит выход





if($act=='exit')


{


session_unregister("valid_user");



session_destroy();


}





session_unregister("valid_user"); - убиваем переменную сессии

valid_user






session_destroy(); - убиваем сессию








reg.php - форма для регистрации


 







цитата





<?


include("func.php");


?>


<h2>Регистрация</h2>



<form method="POST" action="reg_new.php">


<table border="0" cellpadding="0" cellspacing="0"


style="border-collapse: collapse" bordercolor="#111111"

width="33%" id="AutoNumber1">


<tr>



<td width="40%" bgcolor="#C0C0C0">Имя</td>


<td width="60%" bgcolor="#C0C0C0"><input type="text"


name="name" size="20"></td>


</tr>


<tr>


<td width="40%" bgcolor="#C0d0d0">Пароль (длина пароля от 6


до 20 символов)</td>


<td width="60%" bgcolor="#C0d0d0"><input type="password"

name="password" size="20"></td>



</tr>


<tr>


<td width="40%" bgcolor="#C0d0d0">Повтор пароля</td>


<td width="60%" bgcolor="#C0d0d0"><input type="password"


name="password2" size="20"></td>


</tr>


<tr>


<td width="40%" bgcolor="#C0C0C0">E-mail</td>



<td width="60%" bgcolor="#C0C0C0"><input type="text"

name="email" size="30"></td>



</tr>


</table>


<p><input type="submit" value="Войти" name="B1"></p>









 







форма для регистрации нового пользователя.


для внесения нового пользователя форма вызывает файл reg_new.php






reg_new.php - внос нового юзера в базу




 







цитата




<?






include("func.php");








if(!email_test($HTTP_POST_VARS["email"]))


{



msg("error","Ошибка !!!","Поле e-mail заполнено неверно!",

"javascript:history.go(-1)");


}






pass_test($HTTP_POST_VARS["password"],$HTTP_POST_VARS["password2"]);





register($HTTP_POST_VARS["name"],$HTTP_POST_VARS["email"],$HTTP_POST_VARS["password"]);



?>










первым дело проверяем правильность заполнения емейла. если

ошибка то выводится сообщение об этом и выполнение прекращается






потом проверяем правильность паролья (длина и совпадения пароля

и повтора пароля) если ошибка то выводится сообщение об этом и

выполнение прекращается





если все прошло ОК. то вызывается функция register. которая

получив данные заносит нового пользователя в базу.












как я уже говорил следующий раз мы рассмотрим

такую же регистрацию но с использованием КУК.


а изучив все это сможем наконец начать заниматься разработкой

портала.



Комментарии
Нет комментариев.
Добавить комментарий
Пожалуйста залогиньтесь для добавления комментария.
Рейтинги
Рейтинг доступен только для пользователей.

Пожалуйста, залогиньтесь или зарегистрируйтесь для голосования.

Нет данных для оценки.
Гость
Имя

Пароль



Забыли пароль?
Запросите новый здесь.
Сейчас на сайте
Гостей: 4
На сайте нет зарегистрированных пользователей

Пользователей: 1
Не активированный пользователь: 0
новичок: AMD
Статистика
Яндекс.Метрика
Rambler's Top100


PR-CY.ru
Protected by Copyscape Online Plagiarism Checker
Back To Top Back To Top Back To Top

Best Viewed 1280x1024