Проблема в авторизации

Discussion in 'PHP' started by victorianec, 26 Feb 2007.

  1. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Я написал маленький скрипт авторизации. Работает нормально при авторизации входит. Но есть проблема одна когда я перехожу по страницам то меня выкидывает из авторизации и приходится заново авторизоваться. Вот код моего скрипта:

    login_form.php:

    PHP:
    <?  session_start();  ini_set('session.auto_start',1);  
    include (
    "config.php");  
    if (isset(
    $_POST['action']) AND $_POST['action'] == "submit")  { 
     
    session_register('login');  
    session_register('passw');  
    $_SESSION['login'] = $_POST['login'];  $_SESSION['passw'] = $_POST['passw'];  $_POST['login'] = str_replace('~','',strip_tags(trim ($_POST['login'])));  
    $_POST['passw'] = str_replace('~','',strip_tags(trim ($_POST['passw'])));  
    if (!
    $_POST['login']) { 
    echo 
    "<center><br>Пожалуйста введите логин</center><br>"
    unset (
    $_POST['sent']); echo $sm; exit;} 
    if (!
    $_POST['passw']) { echo "<center><br>Пожалуйста введите пароль</center><br>"; unset ($_POST['sent']); echo $sm; exit;} 
    $sql="select login, pass, firstname, email from user where login = '$_POST[login]' and pass = '$_POST[passw]' limit 1";  $result=mysql_query($sql,$db_conn);  $row=mysql_fetch_array($result);  
    if (
    $_POST['login']==$row[login] AND $_POST['passw']==$row[pass]){  
    $at_login TRUE;  }
      else 
     {  echo 
    "Такого пользователя/пароля в базе нет. Повторите авторизацию<br>";  echo $sm;  }  }  
      if (
    $at_login == TRUE){  
    echo <<<
    HTML  
    <div align=center>
    <
    table width=80border=0 cellspacing=0 cellpadding=0>    <tr>      
    <
    th scope=col>Привет $_POST[login]</th>    </tr>    <tr>      <td>&nbsp;</td
    </
    tr>    <tr>      <td>Рады Вас видеть</td>    </tr>    <tr>      <td>$row[firstname]</td>    </tr>    
    <
    tr>      <td>&nbsp;</td>    </tr>    
    <
    tr>      <td><a href=?do=logout>Выйти</a></td>    </tr>  
    </
    table>  </div>  HTML;  }
      else  { 
     echo <<<
    HTML  
    <div align=center>
    <
    table width=20border=0 cellspacing=0 cellpadding=0>  
    <
    form action="" method=post>  
    <
    input name=action type=hidden value=submit />    <tr>      <th colspan=2 scope=col>Войти</th>    </tr>    <tr>      <td><strong>Логин:</strong></td>      <td><input type=text name=login maxlength=20></td>    </tr>    
    <
    tr>      <td><strong>Пароль:</strong></td>      <td>
    <
    input type=password name=passw maxlength=25></td>    </tr>    
    <
    tr>      <td>
    <
    input onclick=submit(); type=submit value=Войти> </td>      
    <
    td><input type=reset value=Очистить></td> </tr>    </form
     </
    table></div
     
    HTML;  }  ?>
    config.php:

    PHP:
    $db_conn mysql_connect("localhost""root""");  
    mysql_select_db("lesson"$db_conn);
    Mysql:

    PHP:
    --    -- Структура таблицы `user`   --      
    CREATE TABLE `user` ( 
     `
    idint(11NOT NULL auto_increment,    
     `
    loginvarchar(15NOT NULL,     
    `
    passvarchar(10NOT NULL,     
    `
    firstnamevarchar(126NOT NULL,    
     
    PRIMARY KEY  (`id`)  
     ) 
    ENGINE=MyISAM  DEFAULT CHARSET=cp1251 AUTO_INCREMENT=10 ;     

    ---- 
    Дамп данных таблицы `user`
    Кто сможет помочь.
     
  2. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    а как подключаешь скрипт авторизации на страницах? версия пхп? register_globals?
     
  3. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    У меня php 5 register_globals = On
    На сайте я в главном шаблоне Подключаю через
    <? require_once("login_form.php"); ?>
     
  4. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    извини, но где в твоем коде прописано, что он должен переносить данные поьзователя по другим страницам?
    Твой код делает только одно - выполняет залогинивания когда человек ввел логин и пасс и нажал "войти". Чтоб данные сохранялись на всех страницах, тебе нужно записать его логин и пасс в сессию в случае успешной авторизации.
     
  5. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    И авторизация кстати говоря дырявая.
    по адресу login_form.php?at_login=1 будет спокойно пропускать без всякого логина и пасса.
     
    1 person likes this.
  6. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    точно не уверен но по поводу во тэтого куска кода...
    PHP:
    <?  session_start();  ini_set('session.auto_start',1);   
    include (
    "config.php");   
    if (isset(
    $_POST['action']) AND $_POST['action'] == "submit")  {  
     
    session_register('login');   
    session_register('passw'); 
    во первых можно два раза не проверять переменную $_POST['action']. первая isset($_POST['action']) AND здесь не нужна вовсе. зачем она если ты ее проверяешь на конкретное значение? И еще я не уверен но ты точно уверен что ссесия будет работать после инклуда? И вообще 90% что у тебя запарка именно с сессиями...
     
  7. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    А не подскажеш как записать в сессию даные после успешной авторизации чтобы на каждой странице видели пользователя?
     
  8. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    2Abra, точно ты прав... я после 5 строки даже не посмотрел... :(

    2victorianec, рекомендую вообще почитать про авторизацию и регу... в инете примеров очень много. да и в книгах это часто есть...
     
  9. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Я пока новичек в написание сессий и не знаю как должно. инклюд же загружает файл связи с базой же
     
  10. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    При чем здесь база? База и сессии совсе разные вещи... блин ну сходи сюда - http://php.su или сюда - http://forum.vingrad.ru или вот сюда http://phpforum.ru там и примеры есть и учебники и еще всекая бяка что тебе может понадобиться... И зря ты бросаешься что то писать даже не зная как это работает. http://php.ru http://phpclub.ru это вдогонку...
     
  11. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    victorianec наглядно твой код авторизации должен выглядеть так:
    PHP:
    if ($_POST['action'] == "submit")
    {
      
    //тут мы проверяем введенный логин и пароль.
      //если они верны, задаем переменную $at_login = TRUE;
      //потом записываем данные в сессию.
     
    $_SESSION['login'] = $_POST['login'];
     
    $_SESSION['pass'] = $_POST['pass'];
    }
    elseif (
    $_SESSION['login'] && $_SESSION['pass'])
    {
     
    //сюда вставляем тот же скрипт проверки что был
     // в первом условии, только к переменной обращаемся
     // через суперглобальный массив $_SESSION а не $_POST
     // если все верно, задаем переменную $at_login = TRUE;
    }

    if (
    $at_login == TRUE
    {
     
    //добро пожаловать пользователь $_SESSION['login']  
    }
    и пиши свой код поаккуратнее - он совершенно нечитабелен, поэтому в нем тяжело понять что к чему.
    и в начале скрипта предопределяй переменную $at_login, или поставь register_globals - off
     
    #11 Abra, 26 Feb 2007
    Last edited: 26 Feb 2007
    1 person likes this.
  12. blaga

    blaga Elder - Старейшина

    Joined:
    23 Mar 2006
    Messages:
    884
    Likes Received:
    273
    Reputations:
    106
    там не $_POST['lpass']; а $_POST['pass'];
    А то он не разбереться почему не работает...:)
     
  13. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Тоже не прав. Не $_POST['pass']; а $_POST['passw'];
     
    1 person likes this.
  14. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    blaga, исправил уже.

    мля ну ты не тупо копи-пасть его к себе, а разберись и сделай на подобии. И замени переменные. Я свои писал от балды.
     
    1 person likes this.
  15. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Все равно выкидывает
     
  16. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    в начале кода session_start(); поставил?

    и прочти все таки документации по сессиям и всему прочему. Думаю гугл выдаст много полезной информации по запросу "авторизация на php"
     
    #16 Abra, 26 Feb 2007
    Last edited: 26 Feb 2007
  17. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    У меня в каждом файле прописан вначале session_start();
    Вот сайт мой http://lesson9.victorianec.com там авторизация стоит верху
     
  18. mR_LiNK[deface_0nl

    mR_LiNK[deface_0nl Elder - Старейшина

    Joined:
    12 Dec 2006
    Messages:
    147
    Likes Received:
    27
    Reputations:
    13
    )хм..посмотрел сайтиг, зачем те вообще там авторизация??..

    скрипт твой еле читаем..глаза еб**сь пока разбирал, наворотил как-будто сдирал и адаптировал... одно лекартсво юзай гугл, скриптов, решений и подсказок оч много
     
    #18 mR_LiNK[deface_0nl, 26 Feb 2007
    Last edited: 26 Feb 2007
  19. victorianec

    victorianec New Member

    Joined:
    22 Feb 2007
    Messages:
    8
    Likes Received:
    1
    Reputations:
    0
    Сайт тот просто так поставлен для школы ЕШКО отчитываюсь. А авторизацию я просто для себя хочу написать, чтобы потом когда понадобиться вставить его там.
     
  20. Abra

    Abra Member

    Joined:
    17 Sep 2005
    Messages:
    278
    Likes Received:
    51
    Reputations:
    29
    ну так САМ и пиши. Мануалы тебе в руки. тут уже все объяснили более чем подробно. если бы у тебя были хотя бы начальные знания, ты бы уже все давно сделал. Так получи эти начальные знания.