Новичок
Профиль
Группа: Участник
Сообщений: 45
Регистрация: 5.7.2008
Репутация: нет Всего: нет
|
вот на всякий Код | <?php
// Функция получения IP пользователя function get_ip() { if ($ip = getenv("HTTP_CLIENT_IP")) { return $ip; }
if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { if ($ip == '' || $ip == "unknown") { $ip = getenv("REMOTE_ADDR"); }
return $ip; } if ( $ip = getenv("REMOTE_ADDR") ) { return $ip; } }
// Вычисляе хэш безопасности function hashh( $user , $user_agent , $user_ip , $tm ) { return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm ); }
// Получаем текущее время с учетом дробных частей секунды function getmicrotime() { $mt = explode( " ", microtime() ); return ( (float)$mt[0] + (float)$mt[1] ); }
// Редирект с параметром function redirect( $par ) { header( "Location: qwe.php?task=" . $par ); exit; }
// Продление сессии (проверка, что пользователь - авторизован) function check() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_COOKIE['name'] ) . "' LIMIT 1" );
// Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "name" , "" , time() - 900 , "/" );
redirect( "not_auth" ); }
// Парсим полученную запись. global $user; $user = mysql_fetch_object( $result );
// Количсетво минут для жизни сессии $minutes = 15; // Ищем, есть ли активная сессия $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " );
// Если нету активной сессии, перекидываем на фору авторизации if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "name" , "" , time() - 900 , "/" );
redirect( "not_auth" ); }
// Если авторизированный пользователь хочет выйти if( isset( $_GET['quit'] ) ) { // Удаляем запись о сессии пользователя mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );
// чищаем куки и усианавливаем время жизни в прошлом setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "name" , "" , time() - 900 , "/" );
// Возвращаем значение "Ложь" return FALSE; } // Иначе, т.е. если пользователь не хочет выходить else { // Обновляем время последней активности пользователя на текущее. mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );
// Продлеваем время жизни кук setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" ); setcookie( "name" , $_COOKIE['name'] , time() + ( $minutes * 60 ) , "/" );
// Возвращаем значение "Истина" return TRUE; } }
// Функция авторизации function auth() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" );
// Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { redirect( "not_auth" ); }
// Парсим полученную запись. $user = mysql_fetch_object( $result );
// Получаем текущее время с учетом дробных частей секунды $tm = getmicrotime(); // Вставляем запись в таблицу с сессиями. mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );
// Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут setcookie( "time" , $tm , time() + 900 , "/" ); setcookie( "name" , $user -> name , time() + 900 , "/" );
// делам редирект без параметра, т.к. никаких ошибок не было redirect( "" ); }
// Функция регистрации function reg() { // Ищем пользователя с именем, указанным в форме регистрации $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' LIMIT 1" );
// Если пользователь найден, делаем редиркт if( mysql_num_rows( $result ) == 1 ) { redirect( "exists" ); }
// Иначе, регистрируем пользователя mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['name'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" ); $_POST['pass'] = $_POST['pass1'];
// Делаем как бы автоматическую авторизацию после регисрации. auth(); }
// --------------- // Соединение с MySQL не комментирую, т.к. не в тему статьи
$host = "localhost"; $port = "3306"; $user = "root"; $pass = ""; $dbnm = "test";
$h = ( empty( $post ) ) ? $host : $host . ":" . $port;
$db = mysql_connect( $h , $user , $pass );
if( !$db ) // Если соединиться не удалось: { print ("Datebase connection failed."); exit(); }
if( ! mysql_select_db( $dbnm ) ) { print ("Datebase select failed."); exit(); }
// ---------------
// Если нажата кнопка с именем blogin (Авторизация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) ) { // Если поле логина или пароля пустое - делаем редирект if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) ) { redirect( "fields" ); }
// В протовном случае переходим к авторизации auth(); }
// Если нажата кнопка с именем breg (Регистрация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) ) { // Если поле логина или пароля или его подтверждения - пусты делаем редирект if( empty( $_POST['name'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) ) { redirect( "fields" ); }
// Если введенные пароли не совпадают - делаем редирект if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) ) { redirect( "nepass" ); }
// Иначе переходим к функции регистрации reg(); }
// Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['name'] ) && check() == TRUE ) { print "Welcome.<br><a href='?quit'>Выйти</a>"; } // иначе else { // Если была ошибка, выводим соответствующее сообщение if( ! empty( $_GET['task'] ) ) { switch( $_GET['task'] ) { case "nepass": print "Пароли не совпадают"; break; case "not_auth": print "Логин или пароль неверный."; break; case "fields": print "Не заполнены все поля"; break; case "exists": print "Пользователь с таким именем уже существует"; break; }
print "<br><br>"; } // И показываем форму
?> Вход: <form action='' method='POST'> Логин: <input type='text' name='name' maxlength='127' value=''><br> Пароль: <input type='text' name='pass' maxlength='127' value=''><br> <input type='Submit' name='blogin' value='Вход'><br> </form> Регистрация: <form action='' method='POST'> Логин: <input type='text' name='name' maxlength='127' value=''><br> Пароль: <input type='text' name='pass1' maxlength='127' value=''><br> Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br> <input type='Submit' name='breg' value='Вход'> </form> <?php }
?> <?php
// Функция получения IP пользователя function get_ip() { if ($ip = getenv("HTTP_CLIENT_IP")) { return $ip; }
if ($ip = getenv("HTTP_X_FORWARDED_FOR")) { if ($ip == '' || $ip == "unknown") { $ip = getenv("REMOTE_ADDR"); }
return $ip; } if ( $ip = getenv("REMOTE_ADDR") ) { return $ip; } }
// Вычисляе хэш безопасности function hashh( $user , $user_agent , $user_ip , $tm ) { return md5( $user ) . md5( $user_agent ) . md5( $user_ip ) . md5( $tm ); }
// Получаем текущее время с учетом дробных частей секунды function getmicrotime() { $mt = explode( " ", microtime() ); return ( (float)$mt[0] + (float)$mt[1] ); }
// Редирект с параметром function redirect( $par ) { header( "Location: qwe.php?task=" . $par ); exit; }
// Продление сессии (проверка, что пользователь - авторизован) function check() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_COOKIE['name'] ) . "' LIMIT 1" );
// Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "name" , "" , time() - 900 , "/" );
redirect( "not_auth" ); }
// Парсим полученную запись. global $user; $user = mysql_fetch_object( $result );
// Количсетво минут для жизни сессии $minutes = 15; // Ищем, есть ли активная сессия $result = mysql_query( "SELECT `*` FROM `auth_sessions` WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "' AND `time` > " . ( time() - ( $minutes * 60 ) ) . " LIMIT 1 " );
// Если нету активной сессии, перекидываем на фору авторизации if( mysql_num_rows( $result ) == 0 ) { setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "name" , "" , time() - 900 , "/" );
redirect( "not_auth" ); }
// Если авторизированный пользователь хочет выйти if( isset( $_GET['quit'] ) ) { // Удаляем запись о сессии пользователя mysql_query( "DELETE FROM `auth_session` WHERE `id` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );
// чищаем куки и усианавливаем время жизни в прошлом setcookie( "time" , "" , time() - 900 , "/" ); setcookie( "name" , "" , time() - 900 , "/" );
// Возвращаем значение "Ложь" return FALSE; } // Иначе, т.е. если пользователь не хочет выходить else { // Обновляем время последней активности пользователя на текущее. mysql_query( "UPDATE `auth_session` SET `time` = " . time() . " WHERE `member` = " . $user -> id . " AND `hash` = '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $_COOKIE['time'] ) . "'" );
// Продлеваем время жизни кук setcookie( "time" , $_COOKIE['time'] , time() + ( $minutes * 60 ) , "/" ); setcookie( "name" , $_COOKIE['name'] , time() + ( $minutes * 60 ) , "/" );
// Возвращаем значение "Истина" return TRUE; } }
// Функция авторизации function auth() { // Ищем пользователя с именем, указанным в куках $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' AND `password` = '" . md5( $_POST['pass'] ) . "' LIMIT 1" );
// Еслии пользователя с таким именем нет, делаем редирект if( mysql_num_rows( $result ) == 0 ) { redirect( "not_auth" ); }
// Парсим полученную запись. $user = mysql_fetch_object( $result );
// Получаем текущее время с учетом дробных частей секунды $tm = getmicrotime(); // Вставляем запись в таблицу с сессиями. mysql_query( "INSERT INTO `auth_sessions` VALUES( " . $user -> id . " , " . time() . " , '" . hash( $user -> name , $_SERVER['HTTP_USER_AGENT'] , get_ip() , $tm ) . "' )" );
// Ставим пользователю куки с его логинов и уникальным временем авторизации. Время жизни кук - 15 минут setcookie( "time" , $tm , time() + 900 , "/" ); setcookie( "name" , $user -> name , time() + 900 , "/" );
// делам редирект без параметра, т.к. никаких ошибок не было redirect( "" ); }
// Функция регистрации function reg() { // Ищем пользователя с именем, указанным в форме регистрации $result = mysql_query( "SELECT `*` FROM `auth_members` WHERE `name` = '" . mysql_escape_string( $_POST['name'] ) . "' LIMIT 1" );
// Если пользователь найден, делаем редиркт if( mysql_num_rows( $result ) == 1 ) { redirect( "exists" ); }
// Иначе, регистрируем пользователя mysql_query( "INSERT INTO `auth_members` VALUES ( '' , '" . mysql_escape_string( $_POST['name'] ) . "' , '" . md5( $_POST['pass1'] ) . "' )" ); $_POST['pass'] = $_POST['pass1'];
// Делаем как бы автоматическую авторизацию после регисрации. auth(); }
// --------------- // Соединение с MySQL не комментирую, т.к. не в тему статьи
$host = "localhost"; $port = "3306"; $user = "root"; $pass = ""; $dbnm = "test";
$h = ( empty( $post ) ) ? $host : $host . ":" . $port;
$db = mysql_connect( $h , $user , $pass );
if( !$db ) // Если соединиться не удалось: { print ("Datebase connection failed."); exit(); }
if( ! mysql_select_db( $dbnm ) ) { print ("Datebase select failed."); exit(); }
// ---------------
// Если нажата кнопка с именем blogin (Авторизация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['blogin'] ) ) { // Если поле логина или пароля пустое - делаем редирект if( empty( $_POST['name'] ) || empty( $_POST['pass'] ) ) { redirect( "fields" ); }
// В протовном случае переходим к авторизации auth(); }
// Если нажата кнопка с именем breg (Регистрация) if( $_SERVER['REQUEST_METHOD'] == "POST" && isset( $_POST['breg'] ) ) { // Если поле логина или пароля или его подтверждения - пусты делаем редирект if( empty( $_POST['name'] ) || empty( $_POST['pass1'] ) || empty( $_POST['pass2'] ) ) { redirect( "fields" ); }
// Если введенные пароли не совпадают - делаем редирект if( md5( $_POST['pass1'] ) != md5( $_POST['pass2'] ) ) { redirect( "nepass" ); }
// Иначе переходим к функции регистрации reg(); }
// Если у поьзователя стоят куки и функция check() скажет что пользователь залогинен if( isset( $_COOKIE['time'] ) && isset( $_COOKIE['name'] ) && check() == TRUE ) { print "Welcome.<br><a href='?quit'>Выйти</a>"; } // иначе else { // Если была ошибка, выводим соответствующее сообщение if( ! empty( $_GET['task'] ) ) { switch( $_GET['task'] ) { case "nepass": print "Пароли не совпадают"; break; case "not_auth": print "Логин или пароль неверный."; break; case "fields": print "Не заполнены все поля"; break; case "exists": print "Пользователь с таким именем уже существует"; break; }
print "<br><br>"; } // И показываем форму
?> Вход: <form action='' method='POST'> Логин: <input type='text' name='name' maxlength='127' value=''><br> Пароль: <input type='text' name='pass' maxlength='127' value=''><br> <input type='Submit' name='blogin' value='Вход'><br> </form> Регистрация: <form action='' method='POST'> Логин: <input type='text' name='name' maxlength='127' value=''><br> Пароль: <input type='text' name='pass1' maxlength='127' value=''><br> Повторите пароль: <input type='text' name='pass2' maxlength='127' value=''><br> <input type='Submit' name='breg' value='Вход'> </form> <?php }
?>
|
Это сообщение отредактировал(а) skyboy - 21.7.2008, 11:13
|