Php Авторизация

Discussion in 'PHP' started by procedure, 14 Jan 2008.

  1. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    Такой вопрос. Обьясните пожалуста + и -. Что лучше применять значения глобальных переменных или сохранять значения авторизации в массиве.
    Вобщем расскажите по подробней.
     
    1 person likes this.
  2. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    Ничё не понял...
    при чём тут массивы?
     
  3. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    глобальные переменные - это зло,на большинстве серверов register_globals отключена.лучше хранить всё в сессии и обращаться как:
    PHP:
     echo "Имя:".$_SESSION['user'];
     
    4 people like this.
  4. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    Да я читал что можно просто данные авторизацции хранить в массиве, каком то.
    понятно спасибо. а почему отключена? я уже на локалхосте планирую блог.
     
  5. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    на php6 разработчики вообще хотят по дефолту выключить регистер_глобалс и правильно!
    если автор имеет ввиду про то как лучше проводить авторизацию...то лучше использовать связку сессий и куки.
    scrat +1 регистр глобалс зло
     
  6. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    А как связаны авторизация и register_globals???
     
    1 person likes this.
  7. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    они её не отключат.её просто не будет
     
    4 people like this.
  8. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    все равно не понимаю, у меня в учебнике описание глобальных переменных чуть ли не на весь учебник...
     
  9. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    при registr_globals on данные записываются прям в переменные, т.е.
    PHP:
    #какая-то форма, например авторизации
    echo'
    <form method="post">
    <input type="text" name="name" />
    .....
    </form>'
    ;

    echo
    "$name";
    Т.е. name как видишь записывается прямо в переменную.
    А при офф нужно делать так:
    PHP:
    $name $_POST['name'];
    т.е. получать данные из запроса и уже после этого писать их в переменную.
    А данные об авторизации храни в куки.
    При использовании сессий авторизация хранится грубо говоря только до закрытия окна браузера. Потом придётся заново вводить логин/пароль.
    При использовании куки такого нет, куки хранятся до истечения срока их действия (скока установишь).
    Минус в том что бывает что куки отключены в браузере, хотя это бывает редко.
     
    #9 .:EnoT:., 14 Jan 2008
    Last edited: 14 Jan 2008
    2 people like this.
  10. krypt3r

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

    Joined:
    27 Apr 2007
    Messages:
    1,507
    Likes Received:
    389
    Reputations:
    101
    Забудьте про глобальные переменные и отключите у себя register_globals, если это у вас включено. Юзайте сессии, как уже было сказано. Кстати, $_SESSION - это и есть массив.
     
    1 person likes this.
  11. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    прям на пальцах обьяснил. Спасибо всем, а именно scrat и .:EnoT:. ++.
    Думаю ну их на. эти кукисы оставлю все в сесси пусть юзеры авторизируются уждый раз зато безопасность больше.
     
  12. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    ну не скажи. при правильном использовании куки не только безопасны но и очень удобны.
    Если сомневаешься в безопасности скриптов. Т.е. боишься что могут спереть куки, то сдлеай хотя бы банальную привязку к ip. вписывай в куки айпи (можно и захешировать чтоб прикольней было), внеси этот ип в базу данных, а потом проверяй. если всё совпадает то пускай юзера, если нет, то посылай его))
     
  13. Macro

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

    Joined:
    11 Nov 2006
    Messages:
    552
    Likes Received:
    298
    Reputations:
    207
    А как ты будешь знать, какой юзер кто? Сессии ведь тоже надо определять чьи :) Все равно придется куки делать, либо заносить в сессию какие-то особенности юзера, типа ip и браузера.
     
  14. SSB1981

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

    Joined:
    7 Jan 2008
    Messages:
    108
    Likes Received:
    9
    Reputations:
    0
    Вот что ты имеешь ввиду:
    PHP:

    <?php

    if(empty($_SERVER['PHP_AUTH_USER'])) 
      { 
        
    Header("WWW-Authenticate: Basic realm=\"Admin Page\""); 
        
    Header("HTTP/1.0 401 Unauthorized"); 
      }
    else
     {
       echo 
    "Пользователь: ".$_SERVER['PHP_AUTH_USER'];
       echo 
    "Пароль: ".$_SERVER['PHP_AUTH_PW'];
    }

    ?>

     
  15. .:EnoT:.

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

    Joined:
    29 May 2007
    Messages:
    803
    Likes Received:
    559
    Reputations:
    50
    SSB1981
    оффтоп
    имхо, в твоём скрипте лучше использовать не empty() а isset() , проверку на существование а не на пустоту :)
     
  16. SSB1981

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

    Joined:
    7 Jan 2008
    Messages:
    108
    Likes Received:
    9
    Reputations:
    0
    какая разница?
     
  17. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    поясни пожалуйста?

    До меня так и не дошло, где нуно хранить пароли? Создать скрипт на сервере и в нем хранить все пароли или будет удобнее хранить их в каком либо массиве?
    Что то я эту систему не до конца понимаю, наверное из за того что я ещё к СУБД не приступил?
     
  18. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    То, что привел SSB1981 это как метод авторизации, тоесть передачи значения имени пользователя и пароля... Дальше просто нужно обработать $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW']...
    Или создать сессию... или кукисы... Конешно перед этим нужно их сверить с существующими именами пользователя и пароля... Можно использовать как SQL базу данных либо организовать хранение пар "username>Password" в файле...
    С SQL всё ясно пробую сравнить пароль, где имя пользователя = $_SERVER['PHP_AUTH_USER']... Потом уже создаем кукисы и сессии...
    - Если хранить на файле...
    Например создаем файл db.txt
    Пары храниться будут в виде user:password
    например содержание нашего файла такое:
    Сначала загружаем этот файл в один массив...
    PHP:
    $db file("db.txt");
    Тут каждый элемент массива будет содержать одну строчку файла, тоесть размер массива в данном случае - 2...
    Затем разбить каждую строку... Потому, как имя отделено от пароля символом ":"
    Потом создать цикл и проверять входящие данные (имя пользователя и пароля) с каждым элмента массива...
    Хз понял ли не понял =))))
    --------------------------------------------------
    Ну короче вот бональный пример:
    Создал в блокноте (Windows, это важно) файл с паролями:
    Потом сам скрипт:
    PHP:
    <?php 
       $uname 
    $_GET['user']; 
       
    $pwd $_GET['pw']; 
       
    $db file("db.txt");
       foreach(
    $db as $str) {
        if (
    $uname.":".$pwd."\r\n" == $str) { ECHO "Hello $uname"; }
       }
    ?>
    <form>
    <input type="text" name="user">
    <input type="text" name="pw">
    </form>
    Разберемся...
    Я не стал тут разделять каждую строку массива на две перемнные, решил для просто стравнивать строки...
    Вот цикл foreach назначает переменной $str с начала первую строку файла db.txt
    Потом сравнивает
    $uname.":".$pwd."\r\n" со этой строкой файла... И т.д. И если они будут совпадать выводим на экран "Hello $uname"
    Почемуже именно такая строка?
    Разберем её.
    $uname - Это имя пользователя, если быть точном это $_POST['user'];
    .":". - Это разделитель (Такой как и в файле)
    $pwd - это пароль или $_GET['pw'];
    ."\r\n" - Это переход на новую строку (Windows!!!) Еслибы был юникс, то \n, но так как я создавал этот файл в блокноте и чтобы перейти на строчку ниже я нажимал Enter, а значит добавлял в конец строки \r\n

    Конешно я мог импользовать rtrim но мне не хотелось =)
    Короче надеюсь и тут понятно =)
    Добалю... Там где Hello $uname можно стартовать сессию или кукисы а в начале файла проверять их наличие...
     
    #18 bul.666, 17 Jan 2008
    Last edited: 17 Jan 2008
    1 person likes this.
  19. procedure

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

    Joined:
    22 Dec 2007
    Messages:
    527
    Likes Received:
    257
    Reputations:
    46
    bul.666-> ну 70% понял, остается эксперементировать на локалхосте.
    Эх 2 вещи меня только расстраивают.
    1. нельзя делать все через переменные, точнее можно только нежелательно.
    2. и различие комманд между линух и винус.

    bul.666 тебе огромное спасибо. надеюсь я с этого извлеко большой урок.
     
    8 people like this.
  20. bul.666

    bul.666 булка

    Joined:
    6 Jun 2006
    Messages:
    719
    Likes Received:
    425
    Reputations:
    140
    Что касается командо, то да =))))))))
    А если ты переживаешь изза пробельных символов \r\n и \n то... в моем случае можно было использовать rtrim($str) кот удаляет конечный пробельный сиивол...
     
    1 person likes this.