За последние 24 часа нас посетили 18512 программистов и 1642 робота. Сейчас ищут 1787 программистов ...

Пример авторизации/регистрации/выхода (на файлах и БД)

Тема в разделе "Решения, алгоритмы", создана пользователем Mr.M.I.T., 30 сен 2008.

  1. kostyl

    kostyl Guest

    Sofia
    Долго думал написать или нет. Решил написать. Девушка вы с октября разбираетесь или как?
     
  2. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    Sofia
    там даже установка есть =)
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    вообще это типа пример =)
    яб не сометовал его использовать, лучше написать свой по аналогии =)
     
  4. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    967
    Симпатии:
    2
    Mr.M.I.T.
    мне к 07.08.09 надо уже чтоб была авторизация, регистрация, выход вообще любой :) сама я не могу, не хватает там чего-то у меня в голове. Тяжело дается знание, а хочется... материалов нет, интернета тоже нет. Только на работе есть.
     
  5. [vs]

    [vs] Суперстар
    Команда форума Модератор

    С нами с:
    27 сен 2007
    Сообщения:
    10.559
    Симпатии:
    632
    Sofia
    В регистрации ничего сложного нет. Это всего лишь, как минимум, запись в БД тех полей, которые использует авторизация.
     
  6. kostyl

    kostyl Guest

    Sofia
    я бы рекомендовал читать книги. Это помогает лучше чем что либо, по крайней мере мне. Например PHP в подлиннике. Вот пока ты на работе скачай электронный вариант и потом читай дома. А то ты так освоишь PHP когда он станет устаревшей технологией.
     
  7. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    PHP:
    1. <?php
    2. if(isset($_COOKIE['login']) && isset($_COOKIE['password']))
    3. {
    4.     $aut = mysql_query("SELECT *
    5.                         FROM users
    6.                         WHERE login = '".mysql_real_escape_string($_COOKIE['login'])."'
    7.                         AND password = '".mysql_real_escape_string($_COOKIE['password'])."'");
    8.     if(mysql_num_rows($aut) > 0)
    9.     {
    10.         $au = 1;
    11.         $aut = mysql_fetch_array($aut);
    12.     }
    13.     else
    14.     {
    15.         $au = null;
    16.     }
    17. }
    18.  
    19. if($au)
    20. {
    21.     echo 'id пользователя: '.$aut['id'];
    22. }
    23. else
    24. {
    25.     echo 'А мы то, оказывается, не авторизованы"';
    26. }
    27. ?>
    Как в куку записать, думаю, объяснять не нужно?
     
  8. Koc

    Koc Активный пользователь

    С нами с:
    3 мар 2008
    Сообщения:
    2.253
    Симпатии:
    0
    Адрес:
    \Ukraine\Dnepropetrovsk
    фигассе, на работу людей берут с такими познаниями.

    Нет, я не завидую, я просто удивлен.
     
  9. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    967
    Симпатии:
    2
    kostyl спасибо за совет, читаю... но думаю не найду в книге ответа до завтрашнего обеда, поэтому обратилась сюда. Вопрос по прежнему открыт :)
     
  10. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    заменить на mysql_real_escape_string
     
  11. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    Мой пост проигнорирован? :)
     
  12. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    Ок =)
     
  13. kostyl

    kostyl Guest

    у тебя плохой код, сперва напиши безопасный.
     
  14. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    теперь захешируй пароль =)
     
  15. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    а кто сказал, что он не захэширован? =)

    просто на скорую руку накидал пример. думаю, есть от чего оттолкнуться. все же лучше чем ничего =)

    P.S.

    пример взлома? просто интересно, взять на вооружение.
     
  16. kostyl

    kostyl Guest

    по словарю
     
  17. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну теперь не забудь про регистронезависимость пароля и логина
     
  18. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    967
    Симпатии:
    2
    Никак связать не могу это:
    PHP:
    1. <?
    2.  /*
    3.   (c) Mr.M.I.T.
    4.    [url=http://mit-home.nov.ru]http://mit-home.nov.ru[/url]
    5.  */
    6.  ############################
    7. # Set Defaults
    8. ############################
    9.  $do=$_GET['do'];
    10.  $error=false;
    11.  $_SESSION['user']=!$_SESSION['user']?array('group'=>"guest"):$_SESSION['user'];
    12.  $GLOBALS['cnf']=get_serial('db_cnf');
    13.  ############################
    14. # Support Functions
    15. ############################
    16. function get_serial($name,$dir='') {
    17.      $res=array();
    18.      $fp=@file_get_contents(($dir?"$dir/{$name}.php":"{$name}.php"));
    19.      if ($fp) {
    20.          $fp=str_replace("<?die();?>","",$fp);
    21.          $res=unserialize($fp);
    22.      }
    23.   return $res;
    24.  }
    25.  function set_serial($arr,$name,$dir='') {
    26.      $arr="<?die();?>".serialize($arr);
    27.      $fp=fopen(($dir?"$dir/{$name}.php":"{$name}.php"),"w");
    28.          fputs($fp,$arr);
    29.          fclose($fp);
    30.  }
    31.  function givepost($keys,$msql=false) {
    32.      $arr=array();
    33.      if ($_POST) {
    34.          $keys=explode(',',$keys);
    35.          for($i=0,$c=count($keys);$i<$c;$i++) {
    36.                $arr[$keys[$i]]=$msql?mysql_real_escape_string($_POST[$keys[$i]]):$_POST[$keys[$i]];
    37.          }
    38.      }
    39.    return $arr;
    40.  }
    41.  function emptypost($keys) {
    42.      if ($_POST) {
    43.          $keys=explode(',',$keys);
    44.          for($i=0,$c=count($keys);$i<$c;$i++) {
    45.                if (empty($_POST[$keys[$i]])) {
    46.                    return true;
    47.                }
    48.          }
    49.          return false;
    50.      }
    51.    return true;
    52.  }
    53.  
    54.  function db_connect() {
    55.      if (!$GLOBALS['db_connid']) {
    56.          $GLOBALS['db_connid']= mysql_connect($GLOBALS['cnf']['db_host'],$GLOBALS['cnf']['db_user'],$GLOBALS['cnf']['db_pass']) or die(mysql_error());
    57.          mysql_query('SET NAMES '.$GLOBALS['cnf']['db_encoding']);
    58.          mysql_select_db($GLOBALS['cnf']['db_name'],$GLOBALS['db_connid']);
    59.          $GLOBALS['cnf']['db_pref']=mysql_real_escape_string($GLOBALS['cnf']['db_pref']);
    60.      }
    61.      return  $GLOBALS['db_connid'];
    62.  }
    63.  
    64.  ################################
    65. # Install
    66. ################################
    67. if (empty($GLOBALS['cnf'])) {
    68.    if (isset($_POST['done'])) {
    69.      if (!emptypost("db_name,db_host,db_user,db_encoding,db_pref")) {
    70.          $GLOBALS['cnf']=givepost("db_name,db_pass,db_host,db_user,db_encoding,db_pref");
    71.          if (db_connect()) {
    72.              set_serial($GLOBALS['cnf'],'db_cnf');
    73.              mysql_query("
    74.               CREATE TABLE `{$GLOBALS['cnf']['db_pref']}_auth` (
    75.                 `id_user` int(11) NOT NULL auto_increment,
    76.                 `login` varchar(300) NOT NULL,
    77.                 `pass` varchar(32) NOT NULL,
    78.                 PRIMARY KEY  (`id_user`),
    79.                 KEY `login` (`login`)
    80.               ) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=1
    81.             ") or die(mysql_error());
    82.              $error='Установка...';
    83.              header("Refresh: 2");
    84.          }
    85.      }else {
    86.          $error="Ошибка: Обязательные поля нужно заполнить";
    87.      }
    88.    }
    89.      print "
    90.       ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
    91.       <form method=POST>
    92.       <table width=30% align=center border=1>
    93.       <tr>
    94.       <td colspan=2 align=center>Установка...</td>
    95.       <tr>
    96.       <td>db_name</td><td><input type='text' name='db_name'></td>
    97.       <tr>
    98.       <td>db_pass</td><td><input type='text' name='db_pass'></td>
    99.       <tr>
    100.       <td>db_user</td><td><input type='text' name='db_user'></td>
    101.       <tr>
    102.       <td>db_host</td><td><input type='text' name='db_host'></td>
    103.       <tr>
    104.       <td>db_prefix</td><td><input type='text' name='db_pref' value='pref'></td>
    105.       <tr>
    106.       <td>db_encoding</td><td><input type='text' name='db_encoding' value='cp1251'></td>
    107.       <tr>
    108.       <td colspan=2 align=center><input type=submit name='done' value='Установить'></td>
    109.       </table>
    110.       </form>
    111.       ";
    112.        die();
    113.  }
    114.  
    115.  ##############################
    116. # Auth/Out/Register
    117. ##############################
    118.  
    119.  
    120.  $db=db_connect();
    121.  switch($do) {
    122.    case"out":
    123.      unset($_SESSION['user']);
    124.      session_destroy();
    125.      if (!headers_sent()) {
    126.            setcookie("save",'',time()+99999,'/');
    127.      }
    128.      header("Location:".($_SERVER['HTTP_REFERER']?$_SERVER['HTTP_REFERER']:$_SERVER['PHP_SELF']));
    129.    break;
    130.    case"register":
    131.      $login=$_POST['login'];
    132.      $pass1=$_POST['pass1'];
    133.      $pass2=$_POST['pass2'];
    134.      if (isset($login) && isset($pass1) && isset($pass2)) {
    135.        if (!empty($login) && !empty($pass1) && !empty($pass2)) {
    136.            $login=mysql_real_escape_string(htmlspecialchars($login));
    137.            $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'");
    138.            if (!mysql_num_rows($sql)) {
    139.                if (strlen($pass1)>=4) {
    140.                    $pass1=md5($pass1);
    141.                    $pass2=md5($pass2);
    142.                    if ($pass1==$pass2) {
    143.                        if(mysql_query("INSERT INTO {$GLOBALS['cnf']['db_pref']}_auth VALUES(NULL,'$login','$pass1')")) {
    144.                          $error="Вы успешно зарегистрированны";
    145.                          header("Refresh:3;url=".$_SERVER['PHP_SELF']);
    146.                      }else{
    147.                            $error="Системная ошибка, не могу занести информацию в БД";
    148.                      }
    149.                    }else {
    150.                        $error="Ошибка: Пароли не совпадают";
    151.                    }
    152.                }else {
    153.                    $error="Ошибка: Минимальная длина пароля 4 символа";
    154.                }
    155.            } else {
    156.                $error="Ошибка: Такой пользователь уже существует";
    157.            }
    158.        }else {
    159.          $error="Ошибка: Обязательные поля нужно заполнить";
    160.        }
    161.      }
    162.      print "
    163.       ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
    164.       <form method=POST>
    165.       <table width=30% align=center border=1>
    166.       <tr>
    167.       <td>Login</td><td><input type='text' name='login'></td>
    168.       <tr>
    169.       <td>Pass 1</td><td><input type='password' name='pass1'></td>
    170.       <tr>
    171.       <td>Pass 2</td><td><input type='password' name='pass2'></td>
    172.       <tr>
    173.       <td colspan=2 align=center><input type=submit value='Регистрация'></td>
    174.       </table>
    175.       </form>
    176.       ";
    177.    break;
    178.    default:
    179.    if ($_SESSION['user']['group']=='guest') {
    180.    $_COOKIE['save']=$_COOKIE['save']?unserialize($_COOKIE['save']):"";
    181.    $login=!$_COOKIE['save']['login'] || isset($_POST['login'])?$_POST['login']:$_COOKIE['save']['login'];
    182.    $pass=!$_COOKIE['save']['pass'] || isset($_POST['pass'])?$_POST['pass']:$_COOKIE['save']['pass'];
    183.    if (isset($login) && isset($pass)) {
    184.        if (!empty($login) && !empty($pass)) {
    185.            if (!$_COOKIE['save']['pass'] || isset($_POST['pass'])) $pass=md5($pass);
    186.            $login=mysql_real_escape_string(htmlspecialchars($login));
    187.            $sql=mysql_query("SELECT * FROM {$GLOBALS['cnf']['db_pref']}_auth WHERE LOWER(login)='".strtolower($login)."'");
    188.            if (mysql_num_rows($sql)) {
    189.                $row=mysql_fetch_assoc($sql);
    190.                if ($row['pass']==$pass) {
    191.                    $_SESSION['user']['group']='user';
    192.                    $_SESSION['user']['login']=$row['login'];
    193.                    if (!headers_sent() && $_POST['save']) {
    194.                        $cook=array();
    195.                        $cook['pass']=$pass;
    196.                        $cook['login']=$row['login'];
    197.                        setcookie("save",serialize($cook),time()+99999,'/');
    198.                    }
    199.                }else {
    200.                  $error="Ошибка: Неверный Пароль";
    201.                }
    202.            }else {
    203.              $error="Ошибка: Такого Пользователя не существует";
    204.            }
    205.        }else {
    206.          $error="Ошибка: Обязательные поля нужно заполнить";
    207.      }
    208.      }
    209.    }
    210.    if ($_SESSION['user']['group']=='guest') {
    211.    print "
    212.   ".($error?"<div align=center width=60% style='border:1px solid red'>$error</div><br>":"")."
    213.   <form method=POST>
    214.   <table width=30% align=center border=1>
    215.   <tr>
    216.   <td>Login</td><td><input type='text' name='login'></td>
    217.   <tr>
    218.   <td>Pass</td><td><input type='password' name='pass'></td>
    219.   <tr>
    220.   <td>Запомнить?</td><td><input type='checkbox' name='save' value='1'></td>
    221.   <tr>
    222.   <td colspan=2><a href='?do=register'>Регистрация</a></td>
    223.   <tr>
    224.   <td colspan=2 align=center><input type=submit value='Войти'></td>
    225.   </table>
    226.   </form>
    227.   ";
    228.    }else {
    229.    print "
    230.   <table width=30% align=center border=1>
    231.   <tr>
    232.   <td>Вы вошли как</td><td>{$_SESSION['user']['login']} <a href='?do=out'>Выйти</a></td>
    233.   </table>
    234.   ";
    235.    }
    236.  }
    237.  ?>
    это:

    PHP:
    1. <?php
    2.  if(isset($_COOKIE['login']) && isset($_COOKIE['password']))
    3.  {
    4.      $aut = mysql_query("SELECT *
    5.                         FROM users
    6.                         WHERE login = '".mysql_real_escape_string($_COOKIE['login'])."'
    7.                         AND password = '".mysql_real_escape_string($_COOKIE['password'])."'");
    8.      if(mysql_num_rows($aut) > 0)
    9.      {
    10.          $au = 1;
    11.          $aut = mysql_fetch_array($aut);
    12.      }
    13.      else
    14.      {
    15.          $au = null;
    16.      }
    17.  }
    18.  
    19.  if($au)
    20.  {
    21.      echo 'id пользователя: '.$aut['id'];
    22.  }
    23.  else
    24.  {
    25.      echo 'А мы то, оказывается, не авторизованы"';
    26.  }
    27.  ?>
    28.  
    и это:

    PHP:
    1.  
    2. <?
    3. $db_host="localhost";
    4.  $db_name="test";
    5.  $username="test5";
    6.  $password="pass";
    7.  $db_con=mysql_connect($db_host,$username,$password);
    8.  $connection_string=mysql_select_db($db_name);
    9. ?>
    10.  
     
  19. kostyl

    kostyl Guest

    Sofia
    Ты приколистка? Пиши по аналогии все сразу сама.
     
  20. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    967
    Симпатии:
    2
    kostyl я и не прикалываюсь... мне действительно хочется избавиться от файла db_cnf.php. Хочется использовать соединение с базой простое, обычное, не сложное... а без этого файла, в котором ничего не понятно не работает вообще ничего... одни сплошные ошибки.
     
  21. kas1e

    kas1e Активный пользователь

    С нами с:
    6 апр 2009
    Сообщения:
    280
    Симпатии:
    0
    может для примера реализации логина еще и цмс написать со всеми функциями? ))

    просили пример - пример есть. защиту от перебора\ограбления корованов\регистрации участников с матерными никами\отсеивание пользователей с маленькими членами\еще что-нибудь невообразимое - неужели я в примере должен все учитывать? ))
     
  22. kostyl

    kostyl Guest

    kas1e
    да не нервничай ты так. Все нормально.
    Sofia
    понятно, если элементарные вещи не можешь сделать.
     
  23. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    вот в этой функции происходит конект
    отредактируй её как надо

    PHP:
    1.  function db_connect() {
    2.      if (!$GLOBALS['db_connid']) {
    3.          $GLOBALS['db_connid']= mysql_connect($GLOBALS['cnf']['db_host'],$GLOBALS['cnf']['db_user'],$GLOBALS['cnf']['db_pass']) or die(mysql_error());
    4.          mysql_query('SET NAMES '.$GLOBALS['cnf']['db_encoding']);
    5.          mysql_select_db($GLOBALS['cnf']['db_name'],$GLOBALS['db_connid']);
    6.          $GLOBALS['cnf']['db_pref']=mysql_real_escape_string($GLOBALS['cnf']['db_pref']);
    7.      }
    8.      return  $GLOBALS['db_connid'];
    9.  }
     
  24. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    967
    Симпатии:
    2
    Mr.M.I.T.
    это я поняла, пытаюсь отредактировать, пока от ошибок избавиться не могу.

    понять бы еще, зачем:
    PHP:
    1. <?php
    2.   if(isset($_COOKIE['login']) && isset($_COOKIE['password']))
    3.   {
    4.      $aut = mysql_query("SELECT *
    5.                         FROM users
    6.                         WHERE login = '".mysql_real_escape_string($_COOKIE['login'])."'
    7.                         AND password = '".mysql_real_escape_string($_COOKIE['password'])."'");
    8.      if(mysql_num_rows($aut) > 0)
    9.      {
    10.          $au = 1;
    11.          $aut = mysql_fetch_array($aut);
    12.      }
    13.      else
    14.      {
    15.          $au = null;
    16.      }
    17.   }
    18.    
    19.   if($au)
    20.   {
    21.      echo 'id пользователя: '.$aut['id'];
    22.   }
    23.   else
    24.   {
    25.      echo 'А мы то, оказывается, не авторизованы"';
    26.   }
    27.   ?>
    28.  
     
  25. Psih

    Psih Активный пользователь
    Команда форума Модератор

    С нами с:
    28 дек 2006
    Сообщения:
    2.678
    Симпатии:
    6
    Адрес:
    Рига, Латвия
    Sofia
    Автоматический вход, аля "Запомнить меня"