Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Система авторизации

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Описание: ваши мнения...
Саныч Модератор
Отправлено: 29 Октября, 2010 - 23:57:59
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Делаю сайт, сделал систему авторизации. Все работает как и предпологалось, проблем нет... Нужно ваше мнение по поводу, возможных ошибок и т.д. Вобщем любая критика Улыбка

Выкладую код с поясняющими комментами, чтоб было понятней
PHP:
скопировать код в буфер обмена
  1. class Users
  2. {
  3.         /*
  4.         --- session status ---
  5.         11 - логин <3 или >20 символов, либо в нем присутствуют недопустимые символы
  6.         12 - пользователь с таким логином не зарегистрирован
  7.         13 - пароль <6 или >20 символов, либо в нем присутствуют недопустимые символы
  8.         14 - неверный пароль
  9.         10 - все ОК (вход через форму)
  10.         21 - пользоател с указанным id не найден
  11.         22 - пароль сессии не соответствует паролю базы
  12.         23 - неверный ip (сессии)
  13.         20 - все ОК (вход по сессиям)
  14.         31 - пользоател с указанным id не найден
  15.         32 - пароль куки не соответствует паролю в базе
  16.         33 - неверный ip (куки)
  17.         30 - все ОК (вход по кукам)
  18.         40 - вход не осуществлен
  19.         41 - вы заблокированы (лимит авторизаций)
  20.         42 - система пользователей отключена
  21.         */
  22.         public function session()
  23.         {
  24.         //проверка включенности системы
  25.                 if(!_USERS || !$this->sets['user_system']) return $this->user_setts(42);
  26.         //проверка на блокировку
  27.                 $sql = mysql_query($this->Mysql->test_login_errors(1));
  28.                 if(mysql_num_rows($sql) >= $this->sets['user_login_error_size'])
  29.                 {
  30.                         $res = mysql_fetch_assoc($sql);
  31.                         if($res['time'] + ($this->sets['user_login_error_time'] * 3600) > TIME) return $this->user_setts(41);
  32.                         mysql_query($this->test_login_errors(2));
  33.                 }
  34.                 elseif(mysql_num_rows($sql) > 0) mysql_query($this->Mysql->test_login_errors(3));
  35.         //запуск сессии
  36.                 session_start();
  37.         //вход через форму
  38.                 if(isset($_POST['login']) && isset($_POST['name']) && isset($_POST['pass']))
  39.                 {
  40.                         $login = trim($_POST['name']);
  41.                         $password = trim($_POST['pass']);
  42.                 //проверка логина (шаблон)
  43.                         if(!preg_match('/^[a-z0-9][a-z0-9\-\_]{1,18}[a-z0-9]$/i',$login)) return $this->user_setts(11);
  44.                 //проверка пароля (шаблон)
  45.                         $regexp = $this->sets['user_password_type'] ?
  46.                                 '/^[a-z0-9][a-z0-9 \-\_\&\#\$\^\.\,\;\:\=\+\*\/\(\)\{\}\[\]\<\>\\\%\@\`\~\|\'\"\?\!]{4,18}[a-z0-9]$/i' :
  47.                                 '/^[a-z0-9][a-z0-9\-\_]{4,18}[a-z0-9]$/i';
  48.                         if(!preg_match($regexp,$password)) return $this->user_setts(13);
  49.                 //проверка существования пользователя
  50.                         $sql = mysql_query($this->Mysql->test_user(1,mysql_real_escape_string($login)));
  51.                         if(mysql_num_rows($sql) == 0) return $this->user_setts(12);
  52.                 //проверка пароля пользователя
  53.                         $res = mysql_fetch_assoc($sql);
  54.                         $pass = md5(strrev(md5($password).md5($this->conf['installed'])).md5($this->conf['secret']['w']));
  55.                         if($res['password'] <> $pass) return $this->user_setts(14);
  56.                 //remember
  57.                         if(isset($_POST['remember'])) setcookie('sva_user',$res['id'].'#'.strrev(md5($password)),($this->sets['cookies_life'] * 86400 + TIME));
  58.                         elseif(isset($_COOKIE['sva_user'])) setcookie('sva_user','');
  59.                 //все ОК       
  60.                         $_SESSION['id'] = $res['id'];
  61.                         $this->pass_hesh($res['id'],$pass);
  62.                         mysql_query($this->Mysql->test_login_errors(2));
  63.                         mysql_query($this->Mysql->update_user(1,$res['id']));
  64.                         return $this->user_setts(10,$res['id']);       
  65.                 }
  66.         //сессия       
  67.                 if(isset($_SESSION['id']) && isset($_SESSION['pass']))
  68.                 {
  69.                 //проверка существования пользователя
  70.                         $sql = mysql_query($this->Mysql->test_user(2,mysql_real_escape_string($_SESSION['id'])));
  71.                         if(mysql_num_rows($sql) == 0) return $this->user_setts(21);
  72.                 //проверка пароля
  73.                         $res = mysql_fetch_assoc($sql);
  74.                         $pass = unserialize($res['password_hesh']);
  75.                         if($_SESSION['pass'] <> substr($res['password'],$pass[0],$pass[1])) return $this->user_setts(22);
  76.                 //проверка ip
  77.                         if($res['last_ip'] <> $_SERVER['REMOTE_ADDR']) return $this->user_setts(23);
  78.                 //все ОК
  79.                         $this->pass_hesh($_SESSION['id'],$res['password']);
  80.                         return $this->user_setts(20,$_SESSION['id']);
  81.                 }
  82.         //cookie
  83.                 if(isset($_COOKIE['sva_user']))
  84.                 {
  85.                         list($id,$password) = split('#',$_COOKIE['sva_user']);
  86.                 //проверка существования пользователя
  87.                         $sql = mysql_query($this->Mysql->test_user(3,mysql_real_escape_string($id)));
  88.                         if(mysql_num_rows($sql) == 0) return $this->user_setts(31);
  89.                 //проверка пароля
  90.                         $res = mysql_fetch_assoc($sql);
  91.                         $pass = md5(strrev(strrev($password).md5($this->conf['installed'])).md5($this->conf['secret']['w']));
  92.                         if($res['password'] <> $pass) return $this->user_setts(32);
  93.                 //проверка ip
  94.                         if($res['last_ip'] <> $_SERVER['REMOTE_ADDR']) return $this->user_setts(33);
  95.                 //все ОК
  96.                         $_SESSION['id'] = $id;
  97.                         $this->pass_hesh($id,$pass);
  98.                         setcookie('sva_user',$id.'#'.$password,($this->sets['cookies_life'] * 86400 + TIME));
  99.                         mysql_query($this->Mysql->update_user(2,$id));
  100.                         return $this->user_setts(30,$id);
  101.                 }
  102.         //нет входа
  103.                 return $this->user_setts(40);
  104.         }
  105.         private function user_setts($status,$id = 0)
  106.         {
  107.                 $res['status'] = $status;
  108.                 if($status < 40 && $status % 10 <> 0) mysql_query($this->Mysql->login_errors($status));
  109.                 if(in_array($status,array(21,22,23))) $this->kill_session();
  110.                 if(in_array($status,array(31,32,33))) setcookie('sva_user','');
  111.                 $res['u'] = array('id' => $id, 'lang' => 0, 'style' => 0);
  112.                 if($id === 0) $sql = mysql_query($this->Mysql->user_sets(1,$this->sets['user_default_group']));
  113.                 else
  114.                 {
  115.                         $sql = mysql_query($this->Mysql->user_sets(2,$id));
  116.                         $res['u'] = array_merge($res['u'],mysql_fetch_assoc($sql));
  117.                         $sql = mysql_query($this->Mysql->user_sets(1,$res['u']['user_group']));
  118.                 }
  119.                 $res['g'] = mysql_fetch_assoc($sql);
  120.                 $this->sets['user'] = $res;
  121.                 return $res;
  122.         }
  123.         private function pass_hesh($id,$hesh)
  124.         {
  125.                 $start = rand(0,25);
  126.                 $end = rand(7,15);
  127.                 if($start + $end > 31) $end = 32 - $start;
  128.                 mysql_query($this->Mysql->password_hesh(serialize(array($start,$end)),$id));
  129.                 $_SESSION['pass'] = substr($hesh,$start,$end);
  130.         }
  131.         private function kill_session()
  132.         {
  133.                 unset($_SESSION['id']);
  134.                 unset($_SESSION['pass']);
  135.         }
  136. }


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Uchkuma
Отправлено: 30 Октября, 2010 - 00:43:11
Post Id



Участник


Покинул форум
Сообщений всего: 1539
Дата рег-ции: Март 2010  
Откуда: Киров


Помог: 6 раз(а)




Ну раз проблем нет, может перенести в "Собственные наработки" или в "Пользовательские функции"? ;)
 
 Top
Саныч Модератор
Отправлено: 30 Октября, 2010 - 00:45:02
Post Id



Участник


Покинул форум
Сообщений всего: 1365
Дата рег-ции: Июль 2010  
Откуда: Украина, Запорожье


Помог: 62 раз(а)




Ну это я думаю, что проблем нет... Хотелось бы услышать мнения более "опытных" людей...


-----
Все возражают против того, что я гений, хотя никто еще так меня не назвал. - Орсон Уэллс
 
 Top
Starlord
Отправлено: 07 Ноября, 2010 - 09:42:35
Post Id



Новичок


Покинул форум
Сообщений всего: 50
Дата рег-ции: Окт. 2010  
Откуда: Россия


Помог: 1 раз(а)




Извините за нубский вопрос конечно (мб даже и оффтоп), но мне всегда было интересно, что означает знак "->" ? Однако

Просто негде было спросить... Растерялся

(Отредактировано автором: 07 Ноября, 2010 - 09:46:55)



-----
Спасибо сообществу php.su за помощь...
 
 Top
OrmaJever Модератор
Отправлено: 07 Ноября, 2010 - 12:59:35
Post Id



Активный участник


Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010  
Откуда: Чернигов


Помог: 299 раз(а)




Так обьявляются объекты и методы класа. Для даного класа будет так
PHP:
скопировать код в буфер обмена
  1. $user = new User;
  2. $user->session()

(Добавление)
мне кстате вот интересно для чего в этом класе функции обьявляются как private public ? Я вобще щитаю что эти слова абсолютно не нужные.


-----
Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB