Кто там Или правильная PHP авторизация на сайте


Содержание материала:

Простая авторизация и аутентификация на PHP в связке с MySQL

Все кто разрабатывает web сайты, рано или поздно сталкивается с такой задачей как авторизация и аутентификация пользователей, реализованная именно с помощью языка программирования, а не с помощью стандарта протокола http. Сегодня мы рассмотрим пример создания простой авторизации с использованием языка программирования PHP, а данные о пользователях будем хранить в базе MySQL.

Приведенный ниже способ является простым или как бы основой для создания нормальной авторизации, но его Вы вполне можете использовать, так как он достаточно хорошо работает, также Вы сами можете улучшить этот способ и внедрить у себя на сайте.

Данный способ основан на сессиях, но я здесь применяю и куки, для того чтобы браузер запоминал пользователя, который аутентифицировался прошлый раз, чтобы каждый раз не вводить логин, можно конечно хранить в куках и пароль, но это не безопасно, даже если он зашифрован. Для того чтобы сессия закончилась, просто закройте браузер и откройте заново.

Создание объектов в базе данных

Переходим к практике. Для начала создадим таблицу хранения данных о пользователях в базе MySQL. Я предлагаю использовать простую структуру таблицы (Вы ее, конечно, можете дополнить чем-нибудь, у меня база называется test, а таблица users):

И давайте сразу же добавим одну запись в эту таблицу:

Итого у нас получилось:

  • Логин – mylogin;
  • Пароль — 202cb962ac59075b964b07152d234b70;

Мы пароль, конечно же, будем хранить в хешированном виде, так как хранить пароль в открытом виде, мягко сказать, не безопасно. У нас Выше хеш пароля 123, поэтому, когда будем вводить пароль в форму, мы будем забивать именно 123, а не 202cb962ac59075b964b07152d234b70.

Создание формы регистрации

Для того чтобы пользователь мог сам зарегистрироваться, сделайте форму, данные с которой будут посылаться на файл обработки регистрации, т.е. записываться в базу данных. Например, вот самый простой способ:

Кстати, при таком способе лучше всего для логина использовать латинские буквы (т.е. английские), если хотите писать логин на русском, то придется немного корректировать код. Файл можете назвать как угодно (для теста я использовал reg.html).

Примечание! Для тестирования я использую всего один файл, я его назвал mylogin.html (код файла ниже). Вы можете использовать в своих файлах и называть их как угодно, я здесь описываю сам процесс авторизации, поэтому применить его можно везде. Кстати, во всех файлах придется использовать функцию session_start(); для того чтобы Вы могли проверять авторизован пользователь или нет. И еще один момент, конечно же, пропишите свои настройки подключения к базе данных.

Создание формы авторизации

Теперь перейдем непосредственно к самой авторизации. Создайте файл с названием mylogin.html со следующим содержанием:

Примечание! Если вдруг у Вас отказывает работать парсер php, т.е. на экран Вам выводится сам код php, то у Вас просто на всего не включена обработка php в файлах html. Настройки делаются в файле конфигурации web сервера httpd.conf (если apache):

В IIS в окне «Добавление сопоставления модуля» (Add Module Mapping) добавьте к *.php еще и *.html через запятую. Это если Вы делаете у себя дома на своем web сервере, а если Вы все это делаете у хостера, то Вам придется писать им и просить внести необходимые изменения, у некоторых хостеров они уже сделаны.

Код я прокомментировал, поэтому я думаю, что все должно быть понятно. Еще раз напоминаю во всех файлах, содержимое которых Вы не хотите показывать не авторизованным пользователям, необходимо писать session_start, ну и, наверное, на этом все. Если есть вопросы, задавайте в комментариях. Удачи!

Работа с сессиями. Создание простой авторизации на PHP

При разработке интернет магазинов практически всегда требуется авторизация. Например, для входа в личный кабинет пользователя, или систему управления интернет-магазином.

Форма авторизации обычно состоит из двух текстовых полей (Логин и пароль) и кнопки Войти. Сейчас при создании в интернет-магазинах личного кабинета, набирает моду установка полей Телефон и Имя, или Имя и email, и другие комбинации. Но советуем так ни когда не делать, т.к. Имя можно написать по-разному, телефон тоже (84952322323 или 232-23-23).

PHP сессии

В этом уроке вы познакомитесь с правильной работой с сессиями на PHP.

Сессии нужны для сохранения определенной информации на стороне браузера. Практически тоже самое что и переменные, отличается только тем, что переменные при переходе на другую страницу сайта, или при обновлении текущей страницы теряют свои значения, а данные записанные в сессии сохраняются, и доступны на любых страницах сайта.

Например, на странице http://ox2.ru/index.php мы записали в сессию ‘session_test’ значение ‘123’. На странице http://ox2.ru/shop.php мы можем прочитать сессию session_test, и получить значение 123.

Для работы с сессиями на php нужно на каждой странице где будет производиться работа с сессиями написать session_start(), в самом начале, до вывода любой информации на экран.

Для записи в сессии существует переменная $_SESSION.

Например, простой пример:

Файл index.php будет запись в сессию:

Файл session.php будет чтение сессии:

Вот в этом простом примере показана работа с сессиями.

Создание авторизации на PHP

Сейчас мы создадим пример авторизации. Основную функцию будет выполнять класс AuthClass.

Вот код с пояснением:

Конечно это самый простой пример создание авторизации на php. Пароли и имена пользователей должны браться из базы данных, шифроваться в MD5, и т.д. Более сложные примеры создания авторизации будут в следующих статьях.

Сессии очень полезны не только при разработке интернет-магазинов, но и при создании сайтов.
Можно придумывать различные фишки, правда стоимость создания сайта может резко увеличиться. Но это того стоит, т.к. интересный и функциональный сайт привлечет к себе много клиентов и постоянных посетителей.

Комментарии (Написать комментарий)

Комментарий:
Большое спасибо

Комментарий:
Всё отлично работает, спасибо! Но такой вопрос:
private $_login = «demo»; //Устанавливаем логин

У меня никак не выходит вместо «demo» прицепить внешнюю переменную. Подскажите пожалуйста, как туда её передать? чтобы можно было авторизовывать не 1-го человека, а много пользователей сверив соответствующие данные не статически, а с переменной.

Комментарий:
При авторизации логин заносится в $_SESSION[‘чего то там’]. в данном случае — $_SESSION[«login»].
Это суперглобальный массив, который доступен на любой странице.
Можно взять имя содержимое нужного элемента на нужной вам странице.

Или можно посмотреть весь массив вот через такую функцию.
function Test_ShowArr($text) <
foreach($text as $key=>$val)
<
echo $key.»=>».$val.»
«;
>
>

Комментарий:
Сергей, для простого вывода используй конструкцию вида: getLogin(); ?>
Например,

Комментарий пользователя getLogin(); ?>

А вот для записи комментария в БД примерно так:
getLogin();
$result = mysql_query(«INSERT INTO . (. username) VALUES (. ‘$username’)»);
.
?>
Если понял что это — хорошо, нет — гугли работа с БД

Регистрация и авторизация php – 100% Защищенная Авторизация и Регистрация на PHP через PDO и RedBeanPHP

Пишем авторизацию пользователя на PHP — Блог веб-разработчиков

Совсем недавно я рассказывал, как при помощи PHP написать систему регистрации для своего сайта. Такой же принцип мы использовали и в своём проекте, созданию которого посвящён раздел «Сайт с нуля» на этом блоге (сам проект я покажу вам гораздо позже). Сегодня же я опишу, как написать авторизацию на сайте, используя данные, полученные от пользователя при регистрации. То есть, будет использоваться таблица MySQL, структура которой была описана в статье про регистрацию. Поэтому я настоятельно рекомендую прежде прочитать ту статью, ибо данная статья является её непосредственным продолжением. Авторизация будет работать с использованием сессий и cookie. Также в статье будет рассмотрено несколько приятных дополнений, таких, как «разлогинивание» (выход) и время последней активности пользователя. Итак, приступим…

Для начала необходимо сверстать главную страницу сайта и поместить её в корне сайта в папку template. Для данного урока нам достаточно, чтобы в этом файле была форма ввода логина и пароля, а также кнопка «Вход». Далее приведён код этой формы:

Файл назовём index.html.

Метод передачи post необходим. Ведь мы не хотим, чтобы при авторизации логин и пароль светились в адресной строке.

Как только форма готова, создадим самый важный файл будущего сайта — главный контроллер, т. е. файл, лежащий в корне сайта — index.php. Именно он и будет запускаться при входе на сайт. На момент написания статьи на нашем проекте код этого файла занимает 92 строки, нам же понадобится пока лишь около 25 строк. Вот его код:

Топ-пост этого месяца:  Что такое сниппет Особенности его составления и оптимизации

Теперь более подробно разберёмся, как всё это работает.

В первых трёх строках мы просто подключаем файлы с функциями, которые будем использовать далее в коде. О них чуть позже. Далее проверим, был ли передан get-параметр action=out. Если он был передан, значит пользователь нажал на ссылку выхода с сайта. Вот, кстати, код этой ссылки. Добавьте его в файл с кодом формы для входа.

Саму функцию, как и все остальные, рассмотрим позже. Сперва логика…

Далее идёт условие, проверяющее авторизирован ли ты (if (login())). Функция возвращает true в случае, если пользователь вошёл на сайт и false в противном случае. Если вернулось true, записываем в переменную $UID id юзера, а в переменную $admin — результат работы функции is_admin($UID). Данная функция определяет, является ли пользователь администратором и возвращает true, если юзер — админ и false в противном случае. В дальнейшем две эти переменные будут необходимы для вывода определённых элементов на странице. Так, следующим условием можно вывести форму авторизации:

Аналогично и с переменной $admin. Кстати, последний код можно включить в файл с формой.
Если же функция login() вернёт false, т. е. пользователь не вошёл на сайт, проверим, нажал ли он на кнопку входа на сайт в форме авторизации:

Если да, запускаем функцию enter(), авторизирующую пользователя. Если ошибок не произойдёт и юзер успешно вошёл, создадим те же 2 переменные: $UID и $admin. В противном случае никакие переменные не создаются – пользователь является гостем. Алгоритм работы представлен на следующей схеме:

Теперь разберёмся со всеми функциями, вызываемыми в данном коде. В первую очередь опишу функцию входа на сайт:

Первым делом, функция проверяет, заполнил ли пользователь поля для ввода логина и пароля. Если да — продолжаем работу программы, если нет — пишем в массив $error текст ошибки и возвращаем его в основную программу, которая, узнав размерность полученного массива, не авторизирует пользователя.
Если же работа функции enter() продолжится, проверим, существует ли в БД запись с таким ником, какой ввёл юзер. Если такой записи не оказалось, вернём опять же массив с соответствующей ошибкой. Если в БД есть один пользователь с таким ником, сравним введённый пароль с паролем, хранящимся в базе данных и соответствующим нашему нику.

Сравниваем мы пароли не в чистом виде. Ведь в БД они хранятся хэшированными функцией md5(). Поэтому, прежде чем сравнивать их, необходимо тем же алгоритмом хэшировать и введённый пользователем при авторизации пароль. Если хэши совпадут, значит логин и пароль совпали и скрипт авторизирует пользователя. Если совпадения не произошло, вернём ошибку.

Теперь объясню, что же значит «авторизироваться». В данном скрипте данные об авторизации хранятся в сессии и cookie. В сессию записываем id пользователя:

И создаём два cookie: login и password с продолжительностью жизни — 50000 секунд. В первый пишем логин, а во второй — хэш пароля.

В этой строке мы выполняем функцию, отвечающую за установку времени последней активности юзера. Вот код этой функции:

Функция перезаписывает поля online и last_act в БД. Кстати, предварительно, необходимо убедиться в существовании этих полей. Оба они имеют тип int.

Алгоритм работы функции enter() приведён на следующей иллюстрации:

Следующая функция отвечает за проверку, авторизирован ли пользователь на сайте или нет — login().

Почему для авторизации мы будем использовать и COOKIE и сессию? Дело в том, что после закрытия браузера, сессия «умирает» и пользователь автоматически разлогинивается. Cookie же хранятся определённое, задаваемое нами, время. В данном случае это 50000 секунд.

Итак, разберёмся, как же эта функция работает. Её стоит запускать первой на всех страницах и модулях будущего сайта. Во-первых, она проверяет, авторизирован ли пользователь, что для дальнейшей работы скрипта крайне важно. Во-вторых, она обновляет время последней активности пользователя, а также поможет в будущем ввести систему онлайн-пользователей.

Функция вернёт true, если юзер авторизирован и false в противном случае. Пичём, в процессе её работы, будет обновлено время жизни cookie, а также они будут созданы, если не существуют.

Лучше всего работу функции online описывает эта иллюстрация:

Если есть сессия и cookie, мы обновляем время жизни cookie. Для этого мы их удаляем, устанавливая время смерти на одну секунду раньше текущего момента времени, а затем устанавливаем заново. Также функцией lastAct() обновлем время последней активности. Возвращаем true.

Если же сессия есть, а cookie по какой-то причине не оказалось, то по id пользователя получаем из БД логин и хэш пароля и пишем их в cookie. Возвращаем true.

Если нет сессии, проверим, быть может существуют cookie. Классический пример авторизации после перезапуска браузера — сессия слетела, но cookie-то живы. Тут уже сложнее, мы должны проверить, совпадает ли пара логин-пароль с какой-либо строкой из БД. Ведь юзер мог заменить в настройках для сайта cookie ручками или написать любую чушь. Если такая пара нашлась, создаём переменную сессии и возвращаем true. Если же пара не найдена, посылаем пользователя на йух и возвращаем false.

Последний, самый печальный вариант — когда ни сессии, ни cookie не оказалось… Возвращаем false.

Теперь обратим взор на функцию is_admin($UID). Она определяет, является ли юзер администратором сайта. Возможно, вам это не нужно, тогда можете опустить эту функцию и все её вызовы в контроллере. Но она может быть полезна для вывода какого либо контента на страницу, предназначенного для администраторов, а не для обычных пользователей. Функция простая и основана на ещё одном созданном столбце в БД в таблице users. Столбец называем prava. Тип int. Если юзер является обыкновенным пользователем, то присваиваем значению в этом столбце 0, если же этот юзер — админ, то присваиваем единицу. Следующая функция и определяет, что стоит в столбце prava; если единица, то возвращается true (пользователь – админ), иначе false.

Ну и последняя, на самом деле очень лёгкая, функция — out(). Принцип её работы прост — удалить все «следы» пользователя – сессию и cookie.

Код всех описанных функций помещаем в файл lib/module_global.php, который подключается в самом начале работы контроллера.

Таким образом, мы написали простую, однако достаточно функциональную регистрацию для своего будущего сайта. В придачу ко всему мы заложили некоторый фундамент для ещё не рассмотренных возможностей: администрирование, онлайн-пользователи, время последней активности. Также авторизация не будет слетать после перезапуска браузера, что достигнуто путём использования cookie. Кроме этого мы предусмотрели и выход с сайта.

В следующем уроке я опишу, как при помощи уже написанной системы авторизации можно будет создать нечто вроде собственного блога, с добавлением сообщений и постраничной навигацией.

Чтобы не пропустить следующие статьи, подпишитесь на RSS.

Удачи и до следующих статей.

Правильная php регистрация и авторизация

Опубликовано: 03.02.2015 13:08

Практически каждому серьёзному сайту требуется авторизация и регистрация пользователя на сайте. Я покажу вам, как сделать это лучше и проще всего.

Приветствую, мои дорогие читатели. Сегодня я представлю вам скрипты для регистрации и авторизации пользователей, которые помогут как можно лучше обезопасить данные ваших юзеров.

PHP Регистрация

Здесь представлен код, который является только общим примером. Замечу, что для каждого сайта код наверняка нужно будет модифицировать. Я использую фреймворк Codeigniter, так что представленные функции типа $this->input->post() являются специфическими и легко заменяются на аналогичные (Если потребуется — опишу в комментариях, только дайте знать).

Кто там? Или правильная PHP авторизация на сайте

Сабж. Хочу написать скрипт на PHP, который может авторизироваться на другом сайте и выпарсить инфу нужную оттуда.
Со второй частью вроде бы понятно, запихаем все содержимое станицы в переменную и будем потом разбирать по кусочкам и вытаскивать что надо.
Но вот как решить первую часть. Подскажите, в какую сторону хотя бы копать.

Заранее, спасибо большое!

siv1987, что куки это понятно, ну а поподробнее можно механизм?
Курл не нужен, так как по кнопоке все будет делаться.
Вот например

Но скрипт мне покажет дулю, т.к. чтобы эту страницу смотреть — надо авторизоваться =(

А какой сайт целевой? — какой там тип авторизации? Есть авторизация через простую форму типа логин/пароль, то нужно отправить POST-запрос на скрипт авторизации с логином и паролем. Только вот как быть с COOKIE авторизации — это уже сложее — врядли получится заставить PHP еще и запоминать/отправлять COOKIE авторизации при каждом запросе.

Можно сделать по другому: пишешь десктопное приложение (программу, короче), например, с помощью NET Framework — там есть готовый движок браузера. Заходишь через это приложение-браузер на сайт, авторизируешься ручками, после чего, например, раз в 10 минут твоя программа-браузер будет обновлять страницу и просто копировать HTML-содержимое либо куда-то на диск C:\file.htm, либо отправлять на твой сервер, где его будет обрабатывать PHP-парсер.

Курл не нужен, так как по кнопоке все будет делаться.

Ещё раз: curl + cookie

Если вы это не понимаете, это сугубо ваши проблемы.

Курл не нужен, так как по кнопоке все будет делаться.

При чем тут кнопка\не кнопка?
curl тут и нужен, чтобы авторизоваться и вытягивать инфу

Есть авторизация через простую форму типа логин/пароль, то нужно отправить POST-запрос на скрипт авторизации с логином и паролем.
Да, такая форма. Отправлю я авторизацию, а дальше что? Поподробнее можете все расписать?

При чем тут кнопка\не кнопка?
curl тут и нужен, чтобы авторизоваться и вытягивать инфу
Ок ок, нужен так нужен, но поподробнее можно? Может есть где пример почитать?

Да, такая форма. Отправлю я авторизацию, а дальше что? Поподробнее можете все расписать?

Дальше вам сайт возвращает COOKIE авторизации с идентификатором вашей сессии, которую нужно хранить и отправлять при кажом запросе. Вот как отправлять COOKIE с помощью PHP — я не знаю, боюсь, что это невозможно (могу ошибаться — эксперты подскажут, т.к., я пишу на ASP.NET и с PHP 100 лет дела не имел).

Топ-пост этого месяца:  Аппаратное ускорение в CSS анимации

Ок ок, нужен так нужен, но поподробнее можно? Может есть где пример почитать?

Гуглить «curl php faq manual»

Ок ок, нужен так нужен, но поподробнее можно? Может есть где пример почитать?

Вот ленивый народ а.

Вот ленивый народ а.

https://www.google.com/search?client=opera&q=PHP+curl+%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&source >
не так!
надо вот так (http://lmgtfy.com/?q=PHP+curl+%D0%90%D0%B2%D1%82%D0%BE%D1%80%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F)

че такие все злые.
Так сразу сказали как надо — ты ж возмущаешься, мол нет, не так, я лучше знаю 😀

В принципе, можешь без CURL-а обойтись, через сокеты HTTP запросы отправлять

Все работает, но как только авторизуется, то белый экран, http code:302 отдает. Может дело в том, что при авторизации на самом сайте руками, после того как успешно введены логин и пароль, редиректиться на внутреннюю страницу с другим урл?

В общем тут я стопорнулся =(

Все работает, осталось только добавить запрос:

$ch = curl_init();
curl_setopt($ch, CURLOPT_COOKIEFILE, dirname(__FILE__).’/cookie.txt’);
curl_setopt($ch, CURLOPT_URL, «http://site.ru»);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$result = curl_exec($ch);
curl_close($ch);

Теперь вопрос безопасности:
При авторизации передаются логин и пароль. Их могут скомуниздить? Как себя защитить?
Заранее, спасибо большое!

И что значат в УРЛе %2 и %5 ? Чем их заменить можно в коде, чтобы выглядело приятнее глазу?

И что значат в УРЛе %2 и %5 ? Чем их заменить можно в коде, чтобы выглядело приятнее глазу?

гуглить urlencode.
Если уж очень важна «приятность глазу» — замените константами/переменными.

Мужики, ну че такие резкие-дерзкие то все? 🙂 🙂 🙂 Я спрашиваю возможно нубские вопросы, но это для того, чтобы подстраховаться. Гораздо хуже будет потом попасть впросак и тогда уже поздно будет их задавать.

Я имел ввиду в самом php коде у меня прописаны логин и пароль. Вот я о чем. Или может мне их в БД кинуть, оттуда вынимать, подставлять в POST запрос и т.д.?

Я имел ввиду в самом php коде у меня прописаны логин и пароль. Вот я о чем. Или может мне их в БД кинуть, оттуда вынимать, подставлять в POST запрос и т.д.?

А логин и пароль для доступа к БД не в коде прописаны?

Как с помощью PHP и MySQL создать систему регистрации и авторизации пользователей

Безопасная система авторизации и регистрации является одним из важнейших элементов при создании проекта с нуля. Один из возможных способов — это создание системы регистрации с помощью PHP и MySQL .

Хотя в Интернете есть много пособий на эту тему, большинство из них предназначено для продвинутых пользователей.

Эта статья расскажет о том, как создать простую версию системы авторизации и регистрации пользователей с использованием PHP и MySQL для начинающих. Давайте начнем!

Ресурсы, необходимые для работы с этим руководством:

  • Xampp ( PHP версии 5.3 или более поздней и MySQL версии 4.1.3 или более поздней );
  • Базовые знания по PHP , HTML и CSS ;
  • Время и терпение.

Что мы создаем

Настройка сервера

Вы можете использовать любой хостинг с поддержкой PHP и MySQL ( только убедитесь, что он поддерживает PHP версии 5.3 или более поздней и MySQL версии 4.1.3 или более поздней ).

Но в этой статье в качестве сервера будет использоваться Xampp . Если до этого не работали с Xampp , эта статья может помочь вам разобраться, как его должным образом установить на вашем компьютере.

Шаг 1 – MySQL

Во-первых, создайте базу данных и таблицу, которая будет содержать все регистрационные данные. Вы можете сделать это вручную с помощью графического интерфейса пользователя PhpMyAdmin или использовать для вставки этой информации SQL .

Взгляните на приведенный ниже код SQL :

Обратите внимание, что все данные представляют собой varchar , и даже пароль позже будет преобразован в символ md5 , чтобы обеспечить его безопасность.

Кроме того, используйте auto_increment для автоматического назначения идентификаторов или номеров пользователям, которые будут регистрироваться в системе.

Теперь, когда таблица создана, нужно задать разметку и стили CSS , а затем PHP -код.

Шаг 2 — Разметка

Для разметки, нам нужно включить три файла, и все они должны быть сохранены в формате « .php «, так как мы создаем программу сценариев на стороне сервера.

Сначала создайте файл login.php . Скопируйте в него приведенный ниже код:

С помощью этого кода вы получите результат, который показан на рисунке ниже:

Далее, создаем файл register.php . Скопируйте и вставьте в него приведенный ниже код:

С помощью этого кода вы получите следующий результат:

Далее, создаем файл intropage.php . Он будет служить в качестве страницы приветствия после того, как пользователь успешно авторизовался в системе:

Этот код даст нам следующий результат:

Шаг 3 — CSS

Теперь, когда разметка готова, нужно добавить CSS -код. В основном, он будет содержать стили для класса страниц container, а также для кнопок и некоторых других элементов, таких как текстовые поля и лайки:

К этому времени, вы уже должны получить тот же результат, что и на изображении, приведенном в начале статьи.

Шаг 4 — Многоразово используемые элементы

Теперь, когда у вас готовы разметка и стили CSS , попробуйте задействовать такие многоразово используемые элементы, как раздел заголовка и раздел подвала. В корневой папке создайте новую папку и назовите ее “ includes “.

В ней будут содержаться все включаемые файлы. Затем в папке includes создайте новый файл и назовите его header.php . Скопируйте часть раздела заголовка в каждый из трех PHP -файлов, созданных нами ранее. Таким образом, у вас получится:

Следующее, что вам нужно сделать, это удалить разметку, скопированную из файла header.php во всех трех PHP -файлах и заменить ее следующим PHP -кодом:

Теперь, сделайте то же самое с подвалом. Скопируйте приведенный ниже код и вставьте его в новый файл footer.php . Он будет включать в себя раздел подвала:

Затем снова удалите эту часть во всех трех файлах PHP и замените ее следующим кодом:

Шаг — 5 Подключение к базе данных

Теперь, когда вы включили файлы разделов заголовка и подвала, пора создать новый включаемый файл. Назовите его constants.php и скопируйте в него следующий код:

В приведенном выше коде, мы создали константы информации базы данных. Теперь мы можем легко изменять информацию всякий раз, когда это необходимо.

Далее, в папке includes создайте новый файл и назовите ее connection.php . В нем будут храниться коды подключения к базе данных. Скопируйте и вставьте в него код, приведенный ниже:

Обратите внимание, что вам обязательно требуется файл constants.php . Если при подключении возникнет ошибка, с его помощью будет остановлено выполнение скрипта и выдано сообщение об ошибке.

Включите файл connection.php в файлах login.php и register.php , так как эти два файла необходимы для кода управления подключением. Скопируйте приведенный ниже код и вставьте его перед включением файла header.php :

Шаг — 6 Конфигурация файла register.php

Теперь необходимо преобразовать форму регистрации в полноценную систему регистрации. Чтобы сделать это, нужно добавить включение еще нескольких файлов PHP после включения header.php . Скопируйте и вставьте приведенный ниже код в файл register.php :

В приведенном выше коде, обратите внимание, что перед добавлением данных в базу производится их валидация. Переменная message используется для хранения сообщения об ошибках или об успешном выполнении действия.

Шаг — 6 Конфигурация файла login.php

Теперь, когда пользователи могут регистрироваться на сайте, необходимо создать систему авторизации. С помощью этого очень простого PHP -кода, вы можете включить систему авторизации. Скопируйте код и вставьте его перед разметкой в файл login.php :

В приведенном выше коде, перед перенаправлением пользователя на страницу intropage.php , которую мы добавим чуть позже, вы в первую очередь должны проверить, была ли установлена сессия .

В противном случае, если сессия не была установлена, пользователю с помощью переменной message будет выдаваться сообщение об ошибке или он будет перенаправляться на страницу login.php .

Шаг — 7 Конфигурация файла intropage.php

Мы установили все, что нужно для файлов register.php и login.php . Теперь вы просто должны обеспечить, чтобы пользователь оставался в системе при перенаправлении на страницу intropage.php . Скопируйте и вставьте приведенный ниже код в файл intropage.php :

Обратите внимание, что оператор if был создан для проверки, установлена ли сессия, и в зависимости от этого должен ли пользователь перенаправляться на страницу login.php или остаться на странице intropage.php .

Шаг — 8 Конфигурация файла logout.php

Наконец, чтобы пользователь мог выйти из системы, нужно удалить сессию с помощью session_destroy .

Скопируйте данный код в файл logout.php :

Заключение

Сегодня мы узнали, как создать простую систему авторизации, используя PHP и MySQL . Конечно, существует много аспектов, которые нужно учитывать, когда речь идет о безопасности, но это уже неплохое начало.

Вы можете изменять приведенные в этой статье коды по своему усмотрению. Если у вас есть идеи по их улучшению, буду рад услышать об этом в комментариях.

Надеюсь, вам понравилась эта статья. Увидимся в следующий раз!

Данная публикация представляет собой перевод статьи « How to Create a Login and Registration System Using PHP and MySQL » , подготовленной дружной командой проекта Интернет-технологии.ру

Регистрация и Авторизация на PHP + MySQL

Доброго времени суток друзья! Давай с Вами рассмотрим регистрацию пользователей на PHP. Для начала давайте определим условия для нашей регистрации пользователей:

  • Пароль шифруем при помощи алгоритма MD5
  • Пароль будем «солить»
  • Проверка на занятость Логина
  • Активация пользователя письмом.
  • Запись и хранение данных в СУБД MySQL

Для написание данного скрипта нам нужно понять, что такое регистрация пользователя. Регистрация пользователя – это получения данных реального пользователя, обработка и хранение данных.

Топ-пост этого месяца:  Лиды и лидогенерация что это такое, лиды в продажах, стоимость

Если объяснять простыми словами то регистрация это всего лишь запись и хранение определенных данных по которым мы можем авторизировать пользователя в нашем случае – это Логин и Пароль.

Авторизация — предоставление определённому лицу или группе лиц прав на выполнение определённых действий, а также процесс проверки данных прав при попытке выполнения этих действий. Проше говоря с помощью авторизации мы можем разграничить доступ к тому или иному контенту на нашем сайте.

Рассмотрим структуру каталогов скриптов для реализации нашей регистрации с авторизацией. Нам нужно разбить скрипты на логические составляющие. Модули регистрации и авторизации мы поместив в отдельный каталог. Так же в отдельные каталоги мы поместим подключение к базе данных MySQL, файл с пользовательскими функциями, файл стилей CSS и наш шаблон HTML. Данная структура позволяет быстро ориентироваться в скриптах. Представьте себе, что у Вас большой сайт с кучей модулями и т.д. и если не будет порядка, то будет очень сложно что-то отыскать в таком бардаке.

Так как мы будем хранить все данные в СУБД MySQL, то давайте создадим не большую таблицу в которой будем хранить данные о регистрации.

Для начала нужно создать таблицу в базе данных. Таблицу назовем bez_reg где bez – это префикс таблицы, а reg название таблицы.

Кто там? Или правильная PHP авторизация на сайте

Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.9.2010
Где: Украина, Луганск

Репутация: нет
Всего: нет

Код
.
$query = «SELECT
AND pass='».crypt($_GET[‘password’], SALT).»‘»;
$result = mysql_query($query);
$num_rows = mysql_num_rows($result);
// Если все в порядке — входим в систему
if($num_rows==1)
<
$row = mysql_fetch_assoc($result);
$_SESSION[‘usr’]=$row[‘usr’];
$_SESSION[‘ ];
$_SESSION[‘rememberMe’] = $_GET[‘rememberMe’];
setcookie(‘rememberMe’, $_GET[‘rememberMe’], 0, «/»);
>
else
$err[]=’Ошибочный пароль или/и имя пользователя!’;
.

и соответственно проверка на то что пользователь авторизован происходит по наличию $_SESSION[‘id’].

Так как большая часть примеров которые я нашел в сети используют хранение пароля в COKKIE я решил уточнить некоторые вопросы здесь.

1) Как реализовать «Запомнить меня»? Как я понимаю пароль хранить в куках для таких целей не логично.
Возможно нужно писать в куки $_COOKIE[‘rememberMe’] и идентификатор пользователя и логин.
И в случае isset($_COOKIE[‘rememberMe’]) писать id и login в $_SESSION, что и авторизует пользователя.
Но в таком случае меня смущает факт того что идентификатором входа является ID, который как правило число 0 — N. По крайней мере у меня так.
Меня смущает безопасность. Я так полагаю что при данном механизме авторизации я смогу поправить кукис изменив в нем сохраненный $_COKKIE[‘id’] и авторизоваться под любым пользователем.

Быть может в место ID в виде числа хранить какой-то хеш который генерируется из ID пользователя и его логина.

Смотрел что хранить vk.com в свои куках. У них там три ID и все они набор символов, что собственно и натолкнуло меня на мысли которые я описал выше.

Прошу подсказать как правильно реализовать данный момент авторизации или дать ссылку на нужную статью.

Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13

enoff
Дата 30.8.2012, 22:04 (ссылка) | (нет голосов) Загрузка .
Код
WHERE usr=’<$_GET['username']>‘
Цитата(serieznyi @ 30.8.2012, 20:38 )
Как реализовать «Запомнить меня»?
Код
if(empty($_SESSION[‘user_id’])) < //если отсутствует user_id в сесси
$cookie_hash = isset($_COOKIE[‘hash’]) ? $_COOKIE[‘hash’] : false;
$cookie_user_ ]) : false;
if($cookie_hash && $cookie_user_id) < // проверяем куки
$query = «SELECT COUNT(*) FROM user_session WHERE user_ ;
$result = mysql_query($query);
if(mysql_result($result, 0)) < // сравниваем значения с записью из базы
$_SESSION[‘user_ > >
>

Это сообщение отредактировал(а) enoff — 30.8.2012, 22:14

Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.9.2010
Где: Украина, Луганск

Репутация: нет
Всего: нет

Благодарю.
Но буквально несколько часов назад наткнулся на статью про Web Framework и теперь подумываю перебраться на какой нибуть из них.
Видимо это решит некоторые мои проблемы.

Это сообщение отредактировал(а) serieznyi — 30.8.2012, 22:37

serieznyi
Дата 30.8.2012, 22:28 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 297
Регистрация: 30.6.2010
Где: Санкт-Петербург

Репутация: нет
Всего: 13

enoff
Дата 31.8.2012, 13:10 (ссылка) | (нет голосов) Загрузка .

Профиль
Группа: Участник
Сообщений: 37
Регистрация: 19.9.2010
Где: Украина, Луганск

Репутация: нет
Всего: нет

Первым под мой взор попал CodeIgniter, но почти сразу я переметнулся к Kohana.
Пока что осваиваю ее. Жутко раздражает структура файлов, а точнее не понимание как ее устроить.
Когда писал сам, то все было предельно просто, а теперь вот пробеммы.

Это сообщение отредактировал(а) serieznyi — 31.8.2012, 15:15

Правильная php регистрация и авторизация

Практически каждому серьёзному сайту требуется авторизация и регистрация пользователя на сайте. Я покажу вам, как сделать это лучше и проще всего.

Приветствую, мои дорогие читатели. Сегодня я представлю вам скрипты для регистрации и авторизации пользователей, которые помогут как можно лучше обезопасить данные ваших юзеров.

PHP Регистрация

Здесь представлен код, который является только общим примером. Замечу, что для каждого сайта код наверняка нужно будет модифицировать. Я использую фреймворк Codeigniter, так что представленные функции типа $this->input->post() являются специфическими и легко заменяются на аналогичные (Если потребуется — опишу в комментариях, только дайте знать).

В данном коде я:

  1. Передаю заголовок
  2. Получаю данные со стороны клиента
  3. Генерирую соль (это некая строка, с помощью которой мы кодируем наш пароль. В случае его воровства грабителям придётся ой как постараться, дабы подобрать пароль доступа). Запомните — Никогда не храните пароли в открытом виде!
  4. Далее с помощью функции crypt шифруем пароль
  5. Выполняем запрос, который вставит определённую запись в таблицу Пользователи. Вы можете переписать этот запрос под свою структуру БД.

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

Следующий же код тоже очень прост в использовании. Смотрим и оцениваем.

В этой функции мы:

  1. Передаём заголовок (см. выше, если не понимаем)
  2. Получаем Логин и Пароль от клиентской стороны
  3. Генерируем соль
  4. Шифруем введённый пароль с солью
  5. Выбираем пользователей, которые подходят под полученные данные
  6. Если кол-во строк в ответе больше 0, то записываем данные в сессию. В противном случае возвращаем 0, т.е. Неудачу (Fail, FALSE и прочие названия).

Данный способ даёт неплохую защиту данных. Практически нереально будет подобрать пароль + даже при воровстве данных информацию не раскодировать, потому что функция crypt кодирует в одну сторону! Раскодировать невозможно!)))) Так что радуемся, репостим, оставляем отзывы и прочее.

Кто там? Или правильная PHP авторизация на сайте

Здесь могла бы быть ваша реклама

Покинул форум
Сообщений всего: 4574
Дата рег-ции: Июль 2006
Откуда: Israel

Секрет
Теперь, когда вы уже наверняка второпях отправили свой запрос,
я расскажу вам простой секрет, который сэкономит вам уйму ожиданий,
даже если первый ответ по теме последуем сразу же.

Само собой я знаю что ответят мне тут же, и если я посмотрю
на сообщения на форуме, то пойму что в общем то я и не ошибаюсь.
Но еще я точно замечу, что очень мало тем, в которых всего два ответа :
вопрос автора и еще два сообщение вида Ответ + Спасибо

После этого приходится начинать уточнять этим неграмотным что мне надо.
Они что, сами читать не умеют? А уточнять приходится.
И иногда пока они переварят то что я им скажу проходит и не одна ночь..

Уверен что если бы я им сказал что у меня есть
фиолетовый квадрат, и нужно превратить его в синий треугольник
и я пытался взять кисточку, макнуть в банку и поводить ей по квадрату
но почему то кисточка не принимала цвет краски в банке,
то на мой вопрос — где взять правильные банки мне бы ответили гораздо быстрее
предложив её открыть, а не тратить еще стольник на жестянку.

Поэтому с тех пор я строю свои вопросы по проверенной давным давно схеме:
Что есть
Что нужно получить
Как я пытался
Почему или что у меня не получилось.

На последок как оно происходит на форумах

Новичок: Подскажите пожалуста самый крепкий сорт дерева! Весь инет перерыл, поиском пользовался!
Старожил: Объясни, зачем тебе понадобилось дерево? Сейчас оно в строительстве практически не используется.
Новичок: Я небоскрёб собираюсь строить. Хочу узнать, из какого дерева делать перекрытия между этажами!
Старожил: Какое дерево? Ты вообще соображаешь, что говоришь?
Новичок: Чем мне нравиться этот форум — из двух ответов ниодного конкретного. Одни вопросы неподелу!
Старожил: Не нравится — тебя здесь никто не держит. Но если ты не соображаешь, что из дерева небоскрёбы не строят, то лучше бы тебе сначала школу закончить.
Новичок: Не знаите — лучше молчите! У меня дедушка в деревянном доме живёт! У НЕГО НИЧЕГО НЕ ЛОМАЕТСЯ.
Но у него дом из сосны, а я понимаю, что для небоскрёба нужно дерево прочнее! Поэтому и спрашиваю. А от вас нормального ответа недождёшся.
Прохожий: Самое крепкое дерево — дуб. Вот тебе технология вымачивания дуба в солёной воде, она придаёт дубу особую прочность:
Новичок: Спасибо, братан! То что нужно.

Отредактировано модератором: Uchkuma, 26 Апреля, 2011 — 10:21:12

IT Памятка

Чтобы не забыть и впоследствии освежить память

Реализация авторизации на сайте с помощью PHP и сессий

Шаблонный стандартный вариант без использования БД с пользователями.

Задача:

Предоставить доступ к определенной странице сайта по логину и паролю.

Решение:

Для авторизации надо создать к примеру 3 файла:

Index.php — здесь форма для авторизации, ввод логина и пароля;

Login.php – здесь происходит проверка авторизации;

Sekret.php – здесь страница доступ к которой только для авторизированных пользователей;

Листинг этих файлов ниже

Листинг файла Login.php

Важно:

Чтобы сессии работали необходимо в начале каждой страницы запускать session_start();

Добавить комментарий
serieznyi
Дата 31.8.2012, 15:15 (ссылка) | (нет голосов) Загрузка .