Новичок
Покинул форум
Сообщений всего: 17
Дата рег-ции: Февр. 2012
Откуда: Орел
Помог: 0 раз(а)
|
Доброго время суток =)
Хочу предложить вашему вниманию открытый код php регистрации и авторизации через протокол sms. В сети очень мало информации можно найти на эту тему, ниже будет представлен код и sql запрос. И так начнем!
Для начало создадим базу данных и назовем ее reg, вы можете назвать ее как хотите на ваше усмотрения.
Создали базу? Далее выполним sql запрос
CODE ( SQL):
скопировать код в буфер обмена
CREATE TABLE `users` ( `user_id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT, `user_login` varchar(30) NOT NULL, `user_password` varchar(32) NOT NULL, `user_hash` varchar(32) NOT NULL, `user_ip` int(10) UNSIGNED NOT NULL DEFAULT '0', PRIMARY KEY (`user_id`) ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1 ;
Далее создаем файл register.php и в него пишем этот код
PHP:
скопировать код в буфер обмена
<? // Страница регситрации нового пользователя # Соединямся с БД if(isset($_POST['submit'])) { # проверям логин (в место логина будет номер мобильного) { $err[] = "Логин может состоять только из цифр"; } if(strlen($_POST['login']) < 3 or strlen($_POST['login']) > 30 ) { $err[] = "Логин должен быть не меньше 3-х символов и не больше 30"; //здесь ставите лимит на свой выбор } # проверяем, не сущестует ли пользователя с таким именем { $err[] = "Пользователь с таким номером уже существует в базе данных"; } # Если нет ошибок, то добавляем в БД нового пользователя { $login = $_POST['login']; require_once "sms.php"; function generate_pass($number) { $arr = array('a','b','c','d','e','f', 'g','h','i','j','k','l', 'm','n','o','p','r','s', 't','u','v','x','y','z', '1','2','3','4','5','6', '7','8','9','0'); // Генерируем пароль для смс $pass = ""; for($i = 0; $i < $number; $i++) { // Вычисляем произвольный индекс из массива $pass .= $arr[$index]; } return $pass; } $newpass = generate_pass(6); # Убераем лишние пробелы и делаем двойное шифрование // $password = md5(md5(trim(''))); $str = "$newpass"; mysql_query("INSERT INTO users SET user_login='".$login."', user_password='".$pass1."'"); $smssend = send("api.smsfeedback.ru", 80, "Логин", "Пароль", "$login", "$newpass", "TEST-SMS"); // чтобы получить логин и пароль нужно зарегистрироваться тут smsfeedback.ru } else { print "<b>При регистрации произошли следующие ошибки:</b><br>"; foreach($err AS $error) { print $error."<br>"; } } } ?> # Напишем форму <form method="POST"> Номер телефона + <input name="login" type="text"><br> <input name="submit" type="submit" value="Зарегистрироваться"> </form>
Далее создадим файл и назовем его login.php
PHP:
скопировать код в буфер обмена
<? // Страница авторизации # Функция для генерации случайной строки function generateCode($length=6) { $chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHI JKLMNOPRQSTUVWXYZ0123456789"; $code = ""; while (strlen($code) < $length) { } return $code; } # Соединямся с БД if(isset($_POST['submit'])) { # Вытаскиваем из БД запись, у которой логин равняеться введенному # Соавниваем пароли if($data['user_password'] === md5(md5($_POST['password']))) { # Генерируем случайное число и шифруем его $hash = md5(generateCode (10 )); if(!@$_POST['not_attach_ip']) { # Если пользователя выбрал привязку к IP # Переводим IP в строку $insip = ", user_ip=INET_ATON('".$_SERVER['REMOTE_ADDR']."')"; } # Записываем в БД новый хеш авторизации и IP mysql_query("UPDATE users SET user_hash='".$hash."' ".$insip." WHERE user_id='".$data['user_id']."'"); # Ставим куки # Переадресовываем браузер на страницу проверки нашего скрипта } else { print "Вы ввели неправильный логин/пароль"; } } ?> #форма авторизации <form method="POST"> Номер <input name="login" type="text"><br> Пароль <input name="password" type="password"><br> Не прикреплять к IP(не безопасно) <input type="checkbox" name="not_attach_ip"><br> <input name="submit" type="submit" value="Войти"> </form>
Далее создадим файл sms.php
PHP:
скопировать код в буфер обмена
<?PHP /* * функция передачи сообщения */ function send($host, $port, $login, $password, $phone, $text, $sender = false, $wapurl = false ) { $fp = fsockopen($host, $port, $errno, $errstr); if (!$fp) { return "errno: $errno \nerrstr: $errstr\n"; } " HTTP/1.0\n"); fwrite($fp, "Host: " . $host . "\r\n"); if ($login != "") { fwrite($fp, "Authorization: Basic " . } $response = ""; $response .= fread($fp, 1 ); } list($other, $responseBody) = explode("\r\n\r\n", $response, 2 ); return $responseBody; } ?>
Создадим файл проверку check.php
PHP:
скопировать код в буфер обмена
<? // Скрипт проверки # Соединямся с БД if (isset($_COOKIE['id']) and isset($_COOKIE['hash'])) { $query = mysql_query("SELECT *,INET_NTOA(user_ip) FROM users WHERE user_id = '".intval($_COOKIE['id'])."' LIMIT 1"); if(($userdata['user_hash'] !== $_COOKIE['hash']) or ($userdata['user_id'] !== $_COOKIE['id']) or (($userdata['user_ip'] !== $_SERVER['REMOTE_ADDR']) and ($userdata['user_ip'] !== "0"))) { print "Хм, что-то не получилось"; } else { print "Привет, ".$userdata['user_login'].". Всё работает!"; } } else { print "Включите куки"; } ?>
Так же можете красиво и аккуратно распределить формы и настройки в других файлов, фантазируйте!
На этом все =)
Комментируйте, дополняйте. Буду весьма признателен за исправления и дополнения!
|