Авторизация на PHP+MySQL

Содержание

Регистрация и авторизация

Принцип реализации

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

Авторизация и дальнейшее пребывание пользователя на сайте происходит по следующей схеме:

  1. Пользователь вводит логин и пароль в форму авторизации и отправляет на сервер.
  2. На сервере проверяется, есть ли в базе данных пользователь с таким логином и паролем.
  3. Если пользователь найден, то информация об этом записывается в сессию или куки.
  4. На страницах сайта происходит проверка — есть ли в сессии данные о том, что пользователь авторизован и в зависимости от этого страница выводится в том или ином виде.

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

Формы авторизации и регистрации

Форма авторизации обычно располагается на главной странице, либо она может быть на всех страницах сайта. Для формы регистрации, в основном, создаётся отдельная страница. Мы создадим всего одну страницу, на которой будут обе формы, и на неё же будут выводиться данные пользователя. Пока на ней будет только HTML код, но мы сразу сделаем PHP файл, потому что в дальнейшем это будет скрипт. Назовём его formreg.php. Код страницы будет такой:

Регистрация

Регистрационные данные пользователей мы будем записывать в таблицу users . Если у Вас ещё нет такой таблицы, то создайте её. В ней должны быть поля id , login и pas . Другие поля мы не будем использовать. Если они есть в таблице, то они будут оставаться пустыми.

Форма авторизации отправляет данные в файл registration.php. Расположим его в той же папке, где находится страница. Код скрипта будет такой:

В строке 9 мы устанавливаем возврат к странице с формами. Так как на локальном сервере выполнение скрипта и повторная загрузка страницы происходит очень быстро, то визуально это будет выглядеть так, как будто при нажатии кнопки «Зарегистрироваться», ничего не происходит. На реальных сайтах обычно делают переход на специальную страницу с информацией о том, что пользователь зарегистрирован и регисрационными данными. Попробуйте выполнить регистрацию и посмотрите, появляются ли в базе данных новые записи.

Авторизация

Форма авторизации запускает на сервере файл authorization.php. Этот скрипт принимает логин и прароль и проверяет, есть ли такой пользователь. Если есть, то логин будет записываться в сессию. Если такой пользователь не найден, то в сессию будет записываться информация об этом. Это нужно для того, чтобы страница, которая будет открыта после выполнения скрипта, получила эту информацию и вывела сообщение, что введён неправильный логин или пароль. Код скрипта такой:

В строке 7 формируется запрос на выборку строки с логином и паролем, полученными из формы. Перед полем pas написано ключевое слово BINARY. Оно нужно для того, чтобы при сравнении по этому полю учитывался регистр символов. Если нужно, чтобы регистр учитывался и при сравнении логина, то BINARY нужно написать перед ним. В примере делается запрос на выборку всех полей. На практике можно делать выборку только тех полей, данные из которых нужно будет выводить на страницу.

После получения результата, проверяется, найдена ли указанная запись. Если запись есть, то логин записывается в сессию. Если пользователь не найден, то вместо логина пишется строка «er login». Можно написать другой текст, но нужно быть уверенным, что он не совпадёт с каким-то логином. Затем происходит возврат на страницу с формами.

На страницах сайта должен быть код, в котором происходит проверка — есть ли в сессии логин. И в зависимости от этого определяется, как должна выглядеть страница. В нашем примере есть только одна страница. На ней и сделаем проверку. Только код будет разделён на две части. Открытие сессии должно производиться до вывода каких-либо данных, то есть, до HTML кода. Поэтому эта часть располагается в самом начале страницы. А остальной код находится внутри тэга , потому что он добавляет на страницу контнет. Добавим в начало страницы такую строку:

Остальной скрипт расположим в теге , в его начале:

Если в сессии есть логин, но в нём содержится строка «er login», то выводится сообщение, что логин или пароль неправильный. После вывода сообщения логин становится пустым. Это сделано для того, чтобы сообщение выводилось только один раз и при переходе на другие страницы не появлялось. Если логин другой, значит пользователь авторизован и страница формируется как для зарегистрированных. Если логина нет, значит авторизации ещё не было и страница выводится для не зарегистрированных пользователей.

Мы рассмотрели только общий принцип создания функции регистрации и авторизации. На реальных сайтах она сложнее. Формы должны выводиться только для не авторизованных пользователей. Кроме того, нужно добавить кнопку «Выход», которая отменяет авторизацию. При регистрации нужно делать проверку формы, проверять уникальность логина и добавить подтверждение пароля.

Коприрование материалов сайта возможно только с согласия администрации

Авторизация через базы данных

Учебник PHP

Практика

Важное

Регулярки

Работа с htaccess

Файлы, папки

Сессии и куки

Работа с БД

Практика по работе с БД в PHP

Перед чтением см. новые уроки раздела «Важное», которые появились выше.

Практика

Движок PHP

Продвинутые БД

Аутентификация

Практика

ООП и MVC

Абстрактные классы и интерфейсы

Трейты

ООП Магия

Практика

Практика: классы как набор методов

  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс ArrayConvertor
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TagHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FormHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс TableHelper
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс SessionShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс CookieShell
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс FileManipulator
  • Урок №
    новая вкладка с new.code.mu
    . текст, код Практика: класс databaseShell TODO cart корзина flash шаблонизатор роутер контроллер кеш логи фалидатор

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

Конечно, в большинстве случаев это не так — вашим сайтом будет пользоваться большое количество человек.

Поэтому авторизацию пользователей следует реализовывать с помощью базы данных (см. учебник SQL, если вы не умете работать с базами данных).

Как обычно, начнем с самого простого и будем постепенно усложнять.

Несколько пользователей, база данных

Для начала создайте с помощью PhpMyAdmin таблицу users в какой-нибудь тестовой базе данных.

Таблица users должна выглядеть так:

id login (Логин) password (Пароль)
1 user 12345
2 admin 54321

У нас есть два пользователя — user и admin и пароли к ним.

Следующий код реализует простую авторизацию на БД. Что в нем происходит?

Пользователь вводит логин и пароль в поле авторизации, эти данные приходят в скрипт, который делает SQL запрос в базу данных и на основании результата судит о том, авторизовать пользователя или нет:

Добавляем сессию

Что должно происходить, если пользователь ввел успешную пару логин-пароль?

Мы должны стартовать сессию и отметить в ней информацию о том, что пользователь авторизовался.

В принципе, можно на этом ограничится и ничего больше не писать в сессию.

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

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

Дополним наш код:

Полностью код авторизации примет такой вид:

Если мы теперь захотим вывести фразу ‘Привет, имя_пользователя’, то это будет сделать несложно:

Неправильная пара логин-пароль

В том, случае если пользователь ввел неправильно логин или пароль — не следует сообщать ему, что именно он ввел неправильно.

Следует написать такую фразу: ‘Неправильный логин или пароль!’ — что-то в таком роде.

Илон Маск рекомендует:  Буферы пикселей и другие эффекты

Зачем это нужно?

Затем, что хакеру сложнее было подобрать пару логин-пароль с помощью перебора.

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

Что вам делать дальше:

Приступайте к решению задач по следующей ссылке: задачи к уроку.

Когда все решите — переходите к изучению новой темы.

Авторизация с сессией , php+mysql , session_start

Привет всем! Вспоминаю PHP в связи с началом программирования под Android. Написал несколько страниц по выборке, редактированию данных в формате JSON. Все работает. На стороне файла db_connect.php стоит временная заглушка, где логин, пароль,хост и база вшита уже.(для тестирования). К нему идет подключение из всех страниц с CRUD и в общем то в тесте все работает как надо.
На стороне сервера MySql используется родная авторизация, с прописанными ролями ,триггерами, функциями (то есть без дополнительных велосипедов в виде таблицы users и проч.) И тоже все работает как надо.

Формат работы с php+mysql: точечное соединение/запрос/закрытие соединения. Пароль и логин храниться в классе Java на android (не в инет браузере, а в приватном классе скомпилированного приложения в sndroid. И то только ,если пароль и логин успешный. ). Никаких куков, сессий нет. То есть порядок следующий — подключился/ запросил/отключился.

Но вопрос в общем то назрел, не в разрезе android, а в разрезе PHP, давно хотел дожать. Смотрите, есть небольшой код авторизации на PHP, написал ради теста. Код простой. Я написал простую форму авторизации.

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

08.07.2020, 22:15

авторизация, трабл с сессией
include ‘confing.php’; if (isset($_POST) && isset($_POST)) < $login =.

Авторизация php mysql
Всем привет! друзья. Не могу найти ошибку. Значит форма регистраций я написал, всё работает.

Авторизация php+mysql
Есть у кого скрипт авторизации на php + mysql, без куков желательно. Если не лень может кто.

авторизация (php+mysql)
Всем привет. Нужна помощь в создании авторизации. Я делаю авторизацию такую: Сначала открывается.

Странности с сессией php
Всем привет. Не могу понять в чем «прикол» с этой сессией. К примеру простой код test.php.

08.07.2020, 22:27 2

ничесе! Круто, скоро и яблочники подтянутся ))

08.07.2020, 23:19 [ТС] 3

Спасибо за царский подгон!

Но я чет в родном mysql не вижу таблицы users)) Есть только таблица user.
Еще раз говорю , что у меня родная аутентификация на сервере, под родной интерфейс mysql Без создания дополнительной таблицы users.

Добавлено через 33 минуты
Так то при наличии дополнительно созданной таблицы users, с любезно созданными полями user,pasword и полем хранящем ид сессии любой может запросить и сверить idшник сессии.)

Кто может справиться с mysql_native_password в разрезе сессии? То есть с хранением сессии при нативной защите MySQL?
Без велосипеда в виде дополнительно созданной таблицы users?

08.07.2020, 23:20 4

А в таблице user есть поля login и pass? Я привел пример кода, естественно там нужно прописать свои данные.

И дальше смотреть если есть сессии, то подключаемся по ним, если есть POST, то по нему.

Или я вообще не понял что такое:

08.07.2020, 23:20
08.07.2020, 23:34 [ТС] 5

Там есть основные поля, логин, хост и пароль. Пароль естественно зашифрован, и называется даже не паролем, а authentification string. Там дичь вида 1B84707ав.D5C041B84707ывыв1B84707. В общем это взрослая аутентификация.
Настоящая.
ИМХО наверное сессию при использовании родной защитой MYSQL из коробки не поднять. (точней ей никак не возпользоваться.)
Спасибо за пример , сейчас потестю, Может как то юзануть и получиться!

08.07.2020, 23:35 6
09.07.2020, 00:13 [ТС] 7

да да, понимаю, но users согласитесь это велосипед. Потому что уже на самом mysql в чистом виде вы можете создавать полноценного пользователя( логин ,пароль, поведение, права по умолчанию и пр..), и там есть (в системной таблице mysql.user) то же самое захешированное поле пароль (Только называется оно authentification string ). И задать этому пользователю силами MySQL можно доступ к любому объекту базы с любыми правами (У меня к примеру на MySQL реализованы права даже до уровня полей в таблице, может он менять значение данного поля ,или нет , имеет ли доступ к сохраненной процедуре или нет, итд.. Даже если ломанут логин и пароль, то только в рамках его прав, выше — на уровень root хрен, реально хрен. А вот если с доп таблицей users, то это та еще дыра.)

Я давно ничего не писал на PHP, знания посредственные. Но по сравнению с той же java, язык дружелюбный и понятный. Особых опасений хранить логин и пароль (после успешного подключения естественно-верный логин и пароль, и на время работы андроид приложения) в классе java нет. Там хрен сломаешь, если только кто то вирусов напустит на телефон, типа пунто свитчера))

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

Но такая методика в PHP+MySQL для браузерного варианта приложения вижу не работает без велосипедов((. По сути $_SESSION, $_SERVER и прочие это глобальные переменные, которые можно угнать. Сколько не соли их((

А можно в PHP в качестве глобальной переменной хранить объект типа Connection? и обращаться к нему при необходимости? C ООП на этом уровне проблем нет, может класс какойнить есть по данному примеру?

Простая авторизация на PHP+MySQL+JavaScript+AJAX

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

В базе данных требуется всего одна таблица:

Первый пользователь должен быть добавлен напрямую в базу, так как редактор работает только для авторизованного пользователя (пароль admin):

Самое главное ограничение, которое такая структура накладывает — одна единственная активная сессия, так как отдельной таблицы для их хранения нет. Это обозначает то, что как только выполнен вход в другом браузере, в предыдущем сессия становится недействительной, ведь храним мы только последнюю (US_SESSION).

Все php-скрипты разбиты на следующие файлы:

  • db.php — подключение базы данных
  • function.php — вспомогательные функции, которые могут понадобится в разных местах.
  • login.php — проверка на авторизацию, и если пользователь не авторизован, то прерывание доступа к любой информации и показ полей авторизации.
  • login_.php — проверка логина, пароля и авторизация.

Интерфейс реализуется следующими файлами:

  • users.php — список пользователей.
  • user.php — интерфейс просмотра и редактирования данных пользователя.
  • user_.php — обработка редактирования пользователя.

Ну и файлы формирующие страницу:

  • header.php — подключаем css, библиотеку jquery, формируем заголовок и основное меню
  • footer.php — закрываем страницу.
  • main.css — оформляем по своему вкусу.

В начале большинства скриптов есть

Благодаря которому не только происходит подключение базы данных, но и проверка авторизации пользователя и переход к авторизации если он не авторизован. Такая схема предотвращает доступ к данным тех кто не авторизован (естественно это не подойдет тем, у кого есть публичные разделы, доступные всем).
Кроме тех java-скриптов, которые подключаются header.php, каждая страница дополнительно внедряет необходимые именно ей скрипты.
Весь php-код, к которому происходит обращение через POST содержится в файлах *_.php для смыслового разделения кода отображения и изменения данных.
Пример JavaScript, сохранающего некоторую информацию в базу:

Похожим образом сделаны все функции, посылающие данные через POST. В любом скрипте обработки POST-запроса также естественно происходит проверка авторизации, так как она встроена в сам модуль подключения к БД (db.php) и ее трудно случайно забыть.

Вся магия авторизации происходит в модулях login.php и login_.php. Модуль login.php будучи вызван одним из первых, просто не пропустит выполнение следующих модулей, если не сможет подтвердить авторизацию и занести в $ID_USERS идентификатор пользователя. Для этого он использует $_COOKIE[‘US_SESSION’] и $_COOKIE[‘ID_USERS’], которые ищутся в базе и если находятся $ID_USERS получает значение и продолжается выполнение остальных модулей.
Если же модуль проверки считает что пользователь не авторизован, он выводит форму авторизации и обрывает выполнение запроса. Плюс такого метода, в отличии от перекидывания на страницу авторизации в том, что после автооризации страница просто обновляется и пользователь остается там где и был, продолжая свою работу.
Саму авторизацию выполняет такой кусок кода:

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

Простая авторизация на PHP.

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

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

session_start(); # Открыли сессию , обязательно условие при работе с сессиями.

header(«Location: login.php»); # производим редирект пользователя на страницу login.php

exit; # После функции header() обязательно завершаем выполнение скрипта при помощи функции exit(). Данный код очень просто, если у нас в массиве $_SESSION нету переменой admin равной значению ‘admin’ перенаправить на страницу авторизации.

Ну и за одно создадим страницу авторизации login.php :

Простой html код создания формы с двумя полями и кнопкой отправки, метод передачи данных post. Если мы все правильно сделали , то при попытки зайти на index.php нас должно выкидывать на форму авторизации.

Следующим этапом мы добавим обработчик данных из формы. Который будет принимать и сравнивать данные из формы. В этом примере у нас будет только один пользователь и хранить логин\пароль мы будем прям в этом же файле. Пароль будет в зашифрованном виде c помощью функции md5(). А что бы узнать узнать хеш пароля попробуйте выполнить код echo md5(‘mypass’); �� Делать это мы будем по условию — только в том случае, если нажата кнопка формы.

У кнопки есть имя («submit»), а данные мы передаем методом post. Соответственно, мы можем просто проверить, существует ли элемент submit в массиве $_POST. Если есть — кнопка была нажата, и мы будем выполнять действия по проверке присланных данных, иначе — ничего делать не будем.

В файл формы (login.php) в самое начало добавим код :

Когда создается сессия, PHP генерирует уникальный идентификатор, который представляет собой случайную строку.Все переменные сессии хранятся на сервере во временном файле.
Сервер отправляет на компьютер пользователя куки, называемые PHPSESSID, для хранения строки уникального идентификатора сессии.
Когда пользователь закрывает браузер, сессия PHP закрывается автоматически. Иначе сервер завершит сессию по истечении заданного периода времени.

Создание регистрации на сайте на PHP + MySQL

Здравствуйте! Сейчас мы попробуем реализовать самую простую регистрацию на сайте с помощью PHP + MySQL. Для этого на вашем компьютере должен быть установлен Apache. Принцип работы нашего скрипта изображен ниже.

1. Начнем с создания таблички users в базе. Она будет содержать данные пользователя (логин и пароль). Зайдем в phpmyadmin (если вы создаете базу на своем ПК http://localhost/phpmyadmin/). Создаем таблицу users, в ней будет 3 поля.

Я создаю ее в базе mysql, вы можете создавать в другой базе. Далее устанавливаем значения, как на рисунке:

Нажимаем «сохранить». Итак, таблица у нас есть.

2. Необходимо соединение с этой таблицей. Давайте создадим файл bd.php. Его содержание:

В моем случае это выглядит так:

Сохраняем bd.php.
Отлично! У нас есть таблица в базе, соединение к ней. Теперь можно приступать к созданию странички, на которой пользователи будут оставлять свои данные.

3. Создаем файл reg.php с содержанием (все комментарии внутри):

4. Создаем файл, который будет заносить данные в базу и сохранять пользователя. save_user.php(комментарии внутри):

5. Теперь наши пользователи могут регистрироваться! Далее необходимо сделать «дверь» для входа на сайт уже зарегистрированным пользователям. index.php (комментарии внутри) :

В файле index.php мы выведем ссылочку, которая будет открыта только для зарегистрированных пользователей. В этом и заключается вся суть скрипта — ограничить доступ к каким-либо данным.

6. Остался файл с проверкой введенного логина и пароля. testreg.php (комментарии внутри):

Ну вот и все! Может урок и скучный, но очень полезный. Здесь показана только идея регистрации, далее Вы можете усовершенствовать ее: добавить защиту, оформление, поля с данными, загрузку аватаров, выход из аккаунта (для этого просто уничтожить переменные из сессии функцией unset) и так далее. Удачи!

Все проверил, работает исправно!

Автор: Стороженко Евгений (отредактировал и опубликовал Максим Шкурупий)

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: www.ruseller.com
Автор: Максим Шкурупий
Урок создан: 24 Июля 2009
Просмотров: 10080453
Правила перепечатки

5 последних уроков рубрики «PHP»

Фильтрация данных с помощью zend-filter

Когда речь идёт о безопасности веб-сайта, то фраза «фильтруйте всё, экранируйте всё» всегда будет актуальна. Сегодня поговорим о фильтрации данных.

Контекстное экранирование с помощью zend-escaper

Обеспечение безопасности веб-сайта — это не только защита от SQL инъекций, но и протекция от межсайтового скриптинга (XSS), межсайтовой подделки запросов (CSRF) и от других видов атак. В частности, вам нужно очень осторожно подходить к формированию HTML, CSS и JavaScript кода.

Подключение Zend модулей к Expressive

Expressive 2 поддерживает возможность подключения других ZF компонент по специальной схеме. Не всем нравится данное решение. В этой статье мы расскажем как улучшили процесс подключение нескольких модулей.

Совет: отправка информации в Google Analytics через API

Предположим, что вам необходимо отправить какую-то информацию в Google Analytics из серверного скрипта. Как это сделать. Ответ в этой заметке.

Подборка PHP песочниц

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

Веб-разработка

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

Итак, есть задача — сделать регистрацию в системе и возможность авторизации. Как это делать? Начнем по порядку.

Регистрация на php

Тут все просто. Делается хранилище данных для пользователей. Обычно это таблица БД. В нее входят такие поля как id, username и password. Остальные поля опциональны. Вы можете собирать e-mail пользователей, их адреса, возможные ip, время выхода в сеть, кодовые слова от банковских карт, секретные вопросы.

В общем, главное — это пара логин-пароль.

Первый важный момент — нельзя хранить пароли пользователей в открытом виде. То есть, как текст. Нельзя потому что если к БД получит доступ кто-то посторонний — он получит базу логин-паролей пользователей, что вряд ли им понравится. А если учесть что логин-пароль у многих пользователей на разных сервисах одни и те же — это ставит под угрозу и личные данные и финансы и личную переписку и все что угодно.

Пароли надо хранить в виде хэша. Хэширование — это операция, которая превращает исходные данные в какой-то слепок известной длины. Это хорошо тем, что слепок уникален. То есть, если мы изменим в исходных данных хотя бы один символ — слепок на выходе операции хэширования получится совершенно, до неузнаваемости другим. Операция хэширования необратима, то есть, из этого слепка не получится развернуть исходные данные. Этим оно и отличается от шифрования.

В MySQL и php есть одна и та же распространенная и безопасная функция хэширования — md5. Этот алгоритм принимает данные и отдает отпечаток.

Итак, мы получаем данные от пользователя, проверяем не пустые ли они, не содержат ли всяких ненужных нам символов (не ограничивайте пользователей слишком сильно). И теперь делаем запрос вроде этого:

Обратите внимание — я специально обозвал переменные $quoted_ потому что перед запихиванием их в запрос их обязательно надо отэскейпить функцией mysql_real_escape_string(). Так как эта функция очень часто используется, а пишется очень длинно (люблю архитекторов пхп) — я рекомендую запихать ее в свою оболочку. Например, так:

Авторизация на php

Мы добавили нового пользователя и теперь он авторизуется. Мы рисуем ему форму логина-пароля и ловим его данные. Что дальше? Ведь пароль нам пришел в открытом виде, а в базе — хэш пароля. Придется конвертировать пароль в хэш, потом сравнивать их? Не, можно сделать проще — в один запрос.

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

Запомнить пользователя

Теперь нам надо запомнить что пользователь авторизован и точно знать кто это. Первое что приходит в голову — использовать для этого куки. Действительно — запихать в куки логин и id пользователя и всегда знать кто запрашивает страницу в данный момент.

Но это порочная практика. Почему? Потому что куки — это файл, который хранится у пользователя в браузере и данные из этого файла передаются серверу в каждом запросе. Во-первых, они передаются как текст, а это значит — их легко перехватить. Во-вторых, это простой текст, посылаемый пользователем. Поэтому его можно буквально переписать. Например, если мы решили хранить в куках логин пользователя «Вася» он может открыть управление куками в своем браузере, найти нужную куку и исправить ее на, скажем, «Admin». И все. Теперь при каждом запросе мы будем получать куку, которая нам будет сообщять юзернейм пользователя — «Admin».

Поэтому безопаснее хранить все данные на сервере в недоступном из веба месте. В какой-то папке, к которой нельзя получить доступ из браузера. В эту папку нужно писать все данные о пользователе и читать их оттуда каждый раз, когда он запрашивает документ. Чтобы узнать какому пользователю принадлежит какой файл данных — надо обзывать файл уникальным именем и вот это имя кидать уже пользователю в куки. Таким образом, пользователь не сможет узнать как называется файл для пользователя Admin — этот файл генерирует система на сервере. И это позволяет таскать от документа к документу хоть пароли в открытом виде.

То что я описал — это механизм сессии. В Perl, например, для использования сессий нужно загружать модули. А в php сессии поддерживаются из коробки. Фактически, все что вам нужно знать — это функция session_start() и массив $_SESSION. Это все. Сейчас расскажу.

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

Чтобы записать в сессию данные нужно просто записать их в массив $_SESSION. Сейчас нам надо помнить id юзера.

Все. Теперь каждый раз когда пользователь будет запрашивать скрипт, который использует сессии — вам будет доступно значение элемента $_SESSION[‘userid’].

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

Узнать авторизован ли пользователь

Ну это уж проще простого! Теперь, когда вы знаете как работают сессии — узнать авторизован ли пользователь — дело одной строки. Вот она:

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

Ну очевидно — сделать один запрос к таблице users. У нас же есть id этого пользователя.

Как разлогинить пользователя, сделать выход

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

Еще можно убить сессию для верности. Это очистит куку у пользователя и уничтожит файл сессии на сервере. При этом из нее пропадут все данные. Делается так:

На этом все. Если остались какие-то вопросы — не стесняйтесь обращаться. Более того, вы можете обратиться ко мне по icq или почте и попросить помочь с чем-нибудь. Я обычно не отказываю. Если помощь потребуется серьезная — я могу попросить небольшую оплату. Кроме того, я могу дистанционно учить вас делать сайты! Вот такой я коуч и гуру:) А если вы хотите получать уроки и трюки просто так, бесплатно — подпишитесь на RSS моего блога.

H Пишем систему авторизации на PHP в черновиках Из песочницы

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

Для начала нам надо создать файл, где будут указаны данные для подключения к базе MySQL. Назовем этот файл, допустим, «db.php», и поместим в него вот эти строки кода:

Сохраняем файл. Теперь пишем систему регистрации. Создадим файл «register.html» со следующим содержанием:

Теперь про reg_post.php — этот файл будет заносить введенную нами информацию в базу данных. У файла будет следующее содержание:

Вот мы написали файл, который будет заносить информацию в базу, или проще говоря, регистрировать. Теперь же пишем файл для входа — login.html. Если присмотреться, то он очень похож по содержанию с файлом register.html

Далее, пишем файл login_post.php со следующим содержанием:

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

А таблицу мы создадим с помощью ввода SQL-команды. Заходим в PMA, выбираем базу, кликаем на вкладку SQL, в поле вставляем следующую команду:

Ну, вот и всё. Я надеюсь, что Вам понравилась данная статья. Если что-то упустил — то пишите в комментарии.

Как сделать регистрацию для сайта на PHP + MySQL (Рейтинг: +24 )

Печать / RSS Очень часто новички сталкиваются с проблемой написания регистрации у себя на сайте. В этой статье я расскажу как ее сделать.
Распишу все пошагово.

Шаг 1. Подключение к базе данных MySQL.
Создадим файл db_connect.php:

Шаг 2. Создадим таблицу для пользователей.

CREATE TABLE `users_profiles` (
`user_id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(32) NOT NULL,
`password` varchar(32) NOT NULL,
PRIMARY KEY (`user_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Шаг 3. Создадим файл handler.php — этот файл будет содержать проверку на авторизацию пользователя.

Шаг 4. Пишем регистрацию.
Для этого создадим файл register.php и напишем в нем следующим код:

Шаг 5. Делаем авторизацию.
Для этого создайте файл login.php

Шаг 6. Выход пользователя.
Каждый юзер должен выходить из сайта, если он этого хочет. Для этого создадим файл exit.php

Шаг 7. Создание главной страницы сайта.
Создадим последний файл — index.php

Для настройки создайте файл .htaccess и впишите в него следующее:

php_value register_globals 0
php_value magic_quotes_gpc 0

php_value zlib.output_compression 1

Тем кому лень делать это все, качайте архив.

Спасибо за внимание!
С ув. Егор Смоляков.
Автор: iNeeXT (31.07.12 / 19:13)
регистрация, авторизация

Ajax авторизация и регистрация на PHP

Напишем систему авторизации и регистрации пользователей на PHP. Для работы скриптов потребуется интерпретатор PHP версии 5.3 и сервер MySQL 5.

Создание базы данных

Создадим новую базу данных с названием testdb , выполнив следующий запрос от привилегированного пользователя.

Для работы с базой, добавим отдельного пользователя testdb и предоставим ему необходимые права.

Структура таблицы users

Для хранения пользователей создадим в базе данных таблицу users , выполнив следующий запрос.

  • id — уникальный идентификатор пользователя
  • username — логин
  • password — шифрованный пароль
  • salt — соль для шифрования пароля

Структура файлов и директорий

Создадим директорию «php-auth» для нашего проекта. Добавим в нее следующие файлы и папки:

  • login.php — страница авторизации пользователя
  • register.php — страница регистрации
  • ajax.php — Файл для обработки Ajax-запросов
  • js — клиентские скрипты
    • ajax-form.js — скрипт для работы с Ajax-формами
  • css — стили CSS
    • style.css — основной файл стилей
    • reset.css — файл сброса кастомных стилей браузеров
  • vendor — сторонние third-party библиотеки
    • bootstrap — Twitter Bootstrap 2.3.2
  • classes — основной функционал модуля
    • AjaxRequest.class.php — обертка для работы с Ajax-запросами
    • Auth.class.php — класс для работы с пользователями

Регистрация пользователей

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

Вся работа с базой данных будет происходить через расширение PDO для PHP. Оно включено в стандартную библиотеку PHP, начиная с версии 5.1.

Основная логика приложения находится в файле classes/Auth.class.php . Разберем подробнее его содержимое.

Алгоритм регистрации

Для создания нового пользователя используется метод User::create() , который принимает логин и пароль в качестве аргументов.

Первым делом, проверяем существование пользователя. Для этого используем метод User::getSalt() , который выбирает из базы «соль» пользователя по его логину. Соль нужна для усложнения подбора паролей пользователей в случае утечки базы.

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

Если пользователь был усшешно создан, функция User::create() возвращает его уникальный идентификатор. Это обычное числовое поле, которое автоматически увеличивается при добавлении записей в таблицу.

Алгоритм аутентификации

Для того, чтобы проверить правильность ввода логина и пароля, используется метод User::authorize() . Первым делом, мы проверяем существование юзера, пытаясь выбрать его соль из базы. Если пользователь не найден, сразу возвращаем false . Иначе, хешируем принятый пароль этой солью через функцию User::passwordHash() . Затем, делаем выборку из базы по логину и хешу пароля.

Если результат запроса оказался непустым, то логин и пароль верные. Сохраняем пользотельские данные в объекте класса User . Записываем id пользователя в сессию через метод User::saveSession() . Если в качестве первого аргумента — $remember , передать ей true , то идентификатор сессии сохранится в куках. Это позволит не вводить пароль каждый раз при перезапуске браузера.

Работа с формами через Ajax

Для обработки Ajax-запросов создадим класс AjaxRequest. Сохраним его в файле classes/AjaxRequest.class.php .

Этот класс облегчит нам обработку данных, отправленных пользователем из формы. В качестве конструктора, он принимает массив с данными запроса ( $_GET или $_POST ).

В запросе обязательно должно быть поле act , которое определяет текущее действие. Например, при регистрации значением $_POST[«act»] будет «register», а при авторизации — «login».

Метод getRequestParam() нужен для получения параметра из запроса. Он делает дополнительную проверку на существование ключа массива и возвращает null , если запрос не содержит нужных данных.

Функция setResponse() используется для формирования ответа. Метод setFieldError() нужен для передачи сообщения об ошибке в поле формы.

Для того, чтобы вернуть ответ пользователю, мы используем метод showResponse . Он генерирует строку в JSON-формате, задает нужные HTTP-заголовки и возвращает данные клиенту.

В файле ajax.php происходит непосредственная обработка запросов через класс AjaxRequest .

Формат JSON-ответа

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

Создадим файл js/ajax-form.js . Он будет перехватывать событие отправки всех форм с классом ajax и отправлять асинхронный запрос серверу. Исходный код ajax-form.js.

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

Обработка ответов происходит в методах объекта script.ajaxForm.callbacks . Пример обработчика ответа для авторизации на сайте:

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

Если нашли ошибку в коде или тексте статьи — обязательно напишите о ней в комментариях.

UPDATE: Исправлены ошибки, связанные с хешированием пароля, нормально заработала функция «Запомнить меня». Спасибо пользователю santas156 за найденные баги.

Илон Маск рекомендует:  Что такое код asp notifyorderhigh
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL