[php] Новичкам: задаем вопросы

Discussion in 'PHP' started by _Great_, 26 May 2007.

Thread Status:
Not open for further replies.
  1. Zircool

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

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    vizard-06 Пример можно для моего случая...
     
  2. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    login.php
    PHP:
    <?session_start();?>
     <form  method="POST"> 
    <br/> 
    &nbsp; &nbsp; &nbsp; Login:<input type="text"  name="log" title="Введите login" value=""> 
    <br/> 
    <br /> 
    Password:<input type="text"  name="passwd" title="Введите password" value=""> 
    <br/> 
    <br /> 
    &nbsp; &nbsp; &nbsp; <input type="submit" name="sub"  value="   Go!  " /> 
    <br/> 
    <br/> 
    </form> 
    <?php 


    $password
    ="1"
    $login="1"
    if(isset(
    $_POST['sub'])) 

    $inputlogin=$_POST['log']; 
    $inputpassword=$_POST['passwd']; 
    $inputlogin=trim($inputlogin); 
    $inputpassword=trim($inputpassword); 

            if(
    $inputpassword==$password && $inputlogin==$login
            { 
            
    $_SESSION['aut'] = true;
            print  (
    "<script>document.location='admin.php';</script>\r\n"); 

            } 
            else 
            { 
            echo 
    "<font color=Red>Неправильный пароль</font>"
           } 



    ?>

    admin.php
    PHP:
    <?session_start();
    if(!isset(
    $_SESSION['aut'])) exit('Доступ запрещён');
    echo 
    'авторизован!';
    //дальше исходник....
    ?>
     
    1 person likes this.
  3. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Настолько тупо делать так:
    PHP:
    if(!isset($_SESSION['aut'])) exit('Доступ запрещён');
    зачем пользователю знать что выводит файл

    Лучше просто
    PHP:
    if(isset($_SESSION['aut']))
    {
    //code
    }
    И все =\

    и все =э
     
    1 person likes this.
  4. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    Isis тут даже не пользователя а скорее воткнуть человеку что да как, куда %) чтоб более понятно было
     
  5. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Если это админка, зачем ему что-то знать?
     
  6. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    ёпт ну если б он знал как делать он бы не спрашивал......вобще как ему нужно сделать он разберётся думаю дальше, я ради примера выложил
     
  7. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    Без "епт" , ога?
    Я предложил лучший пример, насчет вывода ошибки он ничего не сказал
     
  8. Zircool

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

    Joined:
    1 Mar 2006
    Messages:
    162
    Likes Received:
    37
    Reputations:
    5
    Не работает авторизация... Вводишь нужный логин и пароль а в ответ получаешь страницу которая должна выводиться при прямом доступе к странице... и вылетает ошибка

    В чем может быть проблема?

    login.php

    PHP:
    <?
    error_reporting (0);
    session_start();
    print 
    '<form method="POST">';
    print 
    '<br/>';
    print 
    '&nbsp; &nbsp; &nbsp; Login:<input type="text"  name="log" title="Введите login" value="">';
    print 
    '<br/>';
    print 
    '<br />';
    print 
    'Password:<input type="text"  name="passwd" title="Введите password" value="">';
    print 
    '<br/>';
    print 
    '<br />';
    print 
    '&nbsp; &nbsp; &nbsp; <input type="submit" name="sub"  value="   Go!  " />';
    print 
    '<br/>';
    print 
    '<br/>';
    print 
    '</form>';
    $password="1";
    $login="1";
    if(isset(
    $_POST['sub']))
    {
    $inputlogin=$_POST['log'];
    $inputpassword=$_POST['passwd'];
    $inputlogin=trim($inputlogin);
    $inputpassword=trim($inputpassword);

            if(
    $inputpassword==$password && $inputlogin==$login)
            {
            
    $_SESSION['aut'] = TRUE;
            print  (
    "<script>document.location='admin.php';</script>\r\n");

            }
            else
            {
            echo 
    "<font color=Red>Неправильный пароль</font>";
           }
    }


    ?>

    admin.php

    PHP:

    session_start
    ();
    if(isset(
    $_SESSION['aut']))
    {
        print 
    "пашет";

    }
    else
    {
        print 
    " не пашет";
        }
    В ответ получаю "не пашет"
     
  9. !{ra!{e/\/

    !{ra!{e/\/ Banned

    Joined:
    27 Aug 2007
    Messages:
    98
    Likes Received:
    50
    Reputations:
    3
    Такая ошибка бывает когда функции header(), setcookie() или session_start() используют где-нибудь в середине страницы. Все эти функции должны использоваться перед любым выводом html

    Видно ты код admin.php просто срезал из основного кода.У меня скрипт работает и выдает "пашет".
     
  10. VDShark

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

    Joined:
    1 Feb 2007
    Messages:
    260
    Likes Received:
    158
    Reputations:
    62
    Я б даже уточнил - такая ошибка бывает когда все http-заголовки уже отосланы, и началась отсылка "тела".
    Впринципе можно использовать и в середине, и где хочешь - но только тогда буферизацию использовать необходимо...
    Но Zircool'у я думаю лучше пойти по пути наименьшего сопротивления, и более логичного кода :)
     
  11. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Ну вы даёте))
    2 Isis
    PHP:
     if(isset($_SESSION['aut']))
    {
    //code
    }  
    Если $_SESSION = ''; то это условие вернёт true, лучше использовать !empty()
    2 Zircool В теге input нет параметра title.
    по сабжу я бы сделал так:
    В файл admin.php инклудится login.php. Там производится проверка. Если сессия существует и равна нужной, то пускает в админку. если нет, то выводит форму. Заходить можно как на файл admin.php так и на файл login.php.
    Вот код (проверил, всё работает)

    login.php

    PHP:
    <?php
    session_start
    ();
    $form = <<<FORM
    <form  method="post">
    <br/>
    &nbsp; &nbsp; &nbsp; Login:<input type="text" name="log" />
    <br/>
    <br />
    Password:<input type="password"  name="passwd" />
    <br/>
    <br />
    &nbsp; &nbsp; &nbsp; <input type="submit" name="sub"  value="Go!" />
    <br/>
    <br/>
    </form>
    FORM;

    $password '1';
    $login '1';
    if(isset(
    $_POST['sub']))
    {
       
    $inputlogin = !empty($_POST['log']) ? trim($_POST['log']) : '';
       
    $inputpassword = !empty($_POST['passwd']) ? trim($_POST['passwd']) : '';

            if(
    $inputpassword == $password && $inputlogin == $login)
            {
                
    $_SESSION['aut'] = md5($login.$password);
                
    header('location: admin.php');
            }
            else
            {
                echo 
    '<font color="Red">Неправильный пароль</font><br />'.$form;
            }
    }
    elseif(
    $_SESSION['aut'] == md5($login.$password))
    {
        
    define('ADMIN'true);
    }
    else
    {
        echo 
    $form;
    }

    ?>
    admin.php

    PHP:
    <?php
    require_once('login.php');
    if(!
    defined('ADMIN')) exit();

    echo 
    'Админка';
    ?>
    можно и упростить, но имхо так вполне нормально
     
    3 people like this.
  12. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    2 .:EnoT:. зачем в сессию писать ещё значения потом их ещё раз перепроверять?! если логин и пароль совпал то создаётся просто сессия, а в admin.php проверяем уже на существование

    PHP:
     if(isset($_SESSION['aut'])) 

    //code 

     
  13. astrologer

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

    Joined:
    30 Aug 2007
    Messages:
    837
    Likes Received:
    267
    Reputations:
    59
    Параметр title разрешён у всех тегов, кроме: html, head, title, meta, base, basefont, script и param.
     
  14. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    .:EnoT:

    Глупости) ведь сессию ты создаёш а не дядя=) поэтому пустого значения быть не могёт)
     
  15. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Ога, после такого кода ты можешь прыгать от радости, потому что в твою админку может завалиться любой баклан))
    В данному случае я могу прописать в id сессии всё что угодно и попаду в админку. Поэтому при использовании авторизаций на сессиях необходимо объявлять какой-либо идентификатор.
    Например можно так:
    PHP:
    <?php
    session_start
    ();
    $_SESSION['aut'] = session_id();

    #admin.php
    if(!empty($_SESSION['aut']) && $_SESSION['aut'] != session_id()) exit();
    ?>
    Пример не супер, но я думаю наглядно.
    В моём примере я в массив $_SESSION записал хеш логина и пароля (можно всё что угодно). Так же можно использовать имя сессии (session_name()).
    И запомни что проверка всех данных идущих от пользователя нужна обязательно, иначе твоему движку можно колотить гроб и звать оркестр))

    добавлено:
    2 astrologer
    http://htmlbook.ru/html/input.html
    у инпута нет параметра титл. или докажи обратное описав значение этого параметра для тега инпут))

    2 Doom123
    При вызове функции session_start() (а она у нас создаётся в самом начале скрипта) в твои куки пишется ид сессии. Открываем оперу и редачим её.
    Тут ещё раз повторяется пример для vizard-06. Вписав в ид сесии любую херню, код:
    PHP:
     if(isset($_SESSION['aut'])) 

    //code 
    }  
    вернёт true и пустит в админку))
     
    #3115 .:EnoT:., 19 May 2008
    Last edited: 19 May 2008
  16. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Смотри:
    PHP:
    <?php
    session_start
    ();
    $_SESSION['aut'] = session_id();
    echo 
    $_SESSION['aut'];
    ?>
    открывай страницу с этим кодом, покажется твой ид сессии. Теперь лезешь в оперу (ну или в мозилу с плагином работы с куки). Ищешь куку для своего домена с именем PHPSESSID жмякаешь изменить и меняешь на что хочешь...перезагружаешь страницу и видишь ту херню которую вписал))
    Вот так же можно вписать туда всякую херь и выше упомянутый код пустит в админку так как по условию она существует. А что в ней за данные не проверяются))

    ну и если ты прав (хотя не верится) то можно сделать так ..

    PHP:
    <?php
    session_start
    ();
    if(!isset(
    $_SESSION['group']) || $_SESSION['group'] !== 'admin')
    {
    $_SESSION['group']  = 'user';
    }

    авторизация....

    $_SESSION['group']  = 'admin';

    if(
    $_SESSION['group'] === 'admin')
    {
    go...
    }
     
    #3116 Doom123, 19 May 2008
    Last edited: 19 May 2008
    2 people like this.
  17. .:EnoT:.

    .:EnoT:. Сексуальное чудовище

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    2 Doom123

    Смотри:
    PHP:
    <?php
    session_start
    ();
    $_SESSION['aut'] = session_id();
    echo 
    $_SESSION['aut'];
    ?>
    открывай страницу с этим кодом, покажется твой ид сессии. Теперь лезешь в оперу (ну или в мозилу с плагином работы с куки). Ищешь куку для своего домена с именем PHPSESSID жмякаешь изменить и меняешь на что хочешь...перезагружаешь страницу и видишь ту херню которую вписал))
    Вот так же можно вписать туда всякую херь и выше упомянутый код пустит в админку так как по условию она существует. А что в ней за данные не проверяются))
     
    2 people like this.
  18. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    Но у него ведь $_SESSION['aut'] выставляется только тогда када успешно прошёл аунтефикацию!!! и фсё!

    и то что ты делаеш не поможет
     
  19. Doom123

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

    Joined:
    11 Nov 2006
    Messages:
    749
    Likes Received:
    244
    Reputations:
    22
    попробуй написать скрипт
    PHP:
    session_start();
    if(
    $_GET['tes'] === '123)
    {
    $_SESSION['
    aut'] = 'admin';
    }
    if (isset($_SESSION['
    aut']))
    {
    go...
    }
    обойди это твоим методом...

    почему кавычка вырезалась?)
     
    #3119 Doom123, 19 May 2008
    Last edited: 19 May 2008
  20. vizard-06

    vizard-06 Elder - Старейшина

    Joined:
    6 Dec 2006
    Messages:
    55
    Likes Received:
    8
    Reputations:
    0
    как ты применишь значение сессии извне если значение присвоено скриптом $_SESSION['aut'] = true; вместо true можно присвоить значение 1 например.... главное что сессия создалась, доступа к ней нет, и не кто кроме скрипта не сможет её создать, если будут именно такие значения, а в другом скрпте просто проверять создана ли сессия или нет

    login.php
    PHP:
    session_start(); 
    $bla='1';
    if(
    $_GET['us'] == $bla$_SESSION['aut'] = true;
    admin.php
    PHP:
    session_start(); 
    if(isset(
    $_SESSION['aut'])) {
    //прошёл
    }
    попробуй обойти создав сссию извне
     
Thread Status:
Not open for further replies.