Такой вопрос. Обьясните пожалуста + и -. Что лучше применять значения глобальных переменных или сохранять значения авторизации в массиве. Вобщем расскажите по подробней.
глобальные переменные - это зло,на большинстве серверов register_globals отключена.лучше хранить всё в сессии и обращаться как: PHP: echo "Имя:".$_SESSION['user'];
Да я читал что можно просто данные авторизацции хранить в массиве, каком то. понятно спасибо. а почему отключена? я уже на локалхосте планирую блог.
на php6 разработчики вообще хотят по дефолту выключить регистер_глобалс и правильно! если автор имеет ввиду про то как лучше проводить авторизацию...то лучше использовать связку сессий и куки. scrat +1 регистр глобалс зло
при registr_globals on данные записываются прям в переменные, т.е. PHP: #какая-то форма, например авторизации echo' <form method="post"> <input type="text" name="name" /> ..... </form>'; echo"$name"; Т.е. name как видишь записывается прямо в переменную. А при офф нужно делать так: PHP: $name = $_POST['name']; т.е. получать данные из запроса и уже после этого писать их в переменную. А данные об авторизации храни в куки. При использовании сессий авторизация хранится грубо говоря только до закрытия окна браузера. Потом придётся заново вводить логин/пароль. При использовании куки такого нет, куки хранятся до истечения срока их действия (скока установишь). Минус в том что бывает что куки отключены в браузере, хотя это бывает редко.
Забудьте про глобальные переменные и отключите у себя register_globals, если это у вас включено. Юзайте сессии, как уже было сказано. Кстати, $_SESSION - это и есть массив.
прям на пальцах обьяснил. Спасибо всем, а именно scrat и .:EnoT:. ++. Думаю ну их на. эти кукисы оставлю все в сесси пусть юзеры авторизируются уждый раз зато безопасность больше.
ну не скажи. при правильном использовании куки не только безопасны но и очень удобны. Если сомневаешься в безопасности скриптов. Т.е. боишься что могут спереть куки, то сдлеай хотя бы банальную привязку к ip. вписывай в куки айпи (можно и захешировать чтоб прикольней было), внеси этот ип в базу данных, а потом проверяй. если всё совпадает то пускай юзера, если нет, то посылай его))
А как ты будешь знать, какой юзер кто? Сессии ведь тоже надо определять чьи Все равно придется куки делать, либо заносить в сессию какие-то особенности юзера, типа ip и браузера.
Вот что ты имеешь ввиду: 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']; } ?>
SSB1981 оффтоп имхо, в твоём скрипте лучше использовать не empty() а isset() , проверку на существование а не на пустоту
поясни пожалуйста? До меня так и не дошло, где нуно хранить пароли? Создать скрипт на сервере и в нем хранить все пароли или будет удобнее хранить их в каком либо массиве? Что то я эту систему не до конца понимаю, наверное из за того что я ещё к СУБД не приступил?
То, что привел SSB1981 это как метод авторизации, тоесть передачи значения имени пользователя и пароля... Дальше просто нужно обработать $_SERVER['PHP_AUTH_USER'] и $_SERVER['PHP_AUTH_PW']... Или создать сессию... или кукисы... Конешно перед этим нужно их сверить с существующими именами пользователя и пароля... Можно использовать как SQL базу данных либо организовать хранение пар "username>Password" в файле... С SQL всё ясно пробую сравнить пароль, где имя пользователя = $_SERVER['PHP_AUTH_USER']... Потом уже создаем кукисы и сессии... - Если хранить на файле... Например создаем файл db.txt Пары храниться будут в виде userassword например содержание нашего файла такое: Сначала загружаем этот файл в один массив... 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 можно стартовать сессию или кукисы а в начале файла проверять их наличие...
bul.666-> ну 70% понял, остается эксперементировать на локалхосте. Эх 2 вещи меня только расстраивают. 1. нельзя делать все через переменные, точнее можно только нежелательно. 2. и различие комманд между линух и винус. bul.666 тебе огромное спасибо. надеюсь я с этого извлеко большой урок.
Что касается командо, то да =)))))))) А если ты переживаешь изза пробельных символов \r\n и \n то... в моем случае можно было использовать rtrim($str) кот удаляет конечный пробельный сиивол...