Створення реєстрації та авторизації користувача php. Створення простої системи реєстрації користувачів на PHP та MySQL

Нещодавно один з моїх відвідувачів попросив мене написати статтю про те, як зробити реєстрацію та авторизацію користувачів на сайті. Власне, виконую його прохання і в цій статті я розповім про те, як це робиться.

Існує кілька способів створення реєстрації та авторизації користувачівАле в цій статті я розберу свій улюблений - через механізм сесій або cookie.

Насамперед, якщо Ви хочете зробити реєстрацію у себе на сайті, то необхідно розуміти, де зберігатимуться дані про користувачів. Можна зберігати у звичайному текстовому файлі, XML-файлі, або базі даних. Перші два варіанти дуже небезпечні, тому не рекомендую Вам ними користуватися. А ось третій варіант - зберігання інформації про користувачів у базі даних- найпопулярніший і саме цим способом зберігання інформації я раджу Вам користуватися.

Із місцем зберігання визначилися. Тепер перейдемо безпосередньо до алгоритму авторизації:

  1. Створити форму реєстрації на HTML.
  2. Отримати дані з форми у скрипті-обробнику.
  3. Перевірити отримані дані, і якщо вони некоректні, зробити редирект назад на форму реєстрації.
  4. Якщо дані коректні, то записати в базу даних.

Ось і весь процес реєстрації користувача на сайті. Тобто реєстрація – це збереження інформації про користувача на сайті.

Подальшим пунктом є авторизація користувача на сайтіОднак, перш ніж до нього переходити, розповім про один важливий момент у формі реєстрації - паролі. Я Вам настійно рекомендую не зберігати паролі у відкритому вигляді (наприклад, " 123456 Обов'язково їх шифруйте, хоча б за допомогою функції md5(). І у базі даних зберігайте саме зашифрований пароль.

Тепер авторизація. Перше, що Ви повинні зрозуміти – це те, що інформація про авторизацію має десь зберігатися. Найпростіший варіант - це зберігання інформації в сесії (або в cookie). А тепер алгоритм:

  1. Створити форму авторизації користувача на HTML, куди користувач повинен буде ввести свій логін та пароль.
  2. У скрипт-обробнику прийняти дані від користувача. Якщо Ви послухалися, і зберігаєте шифровані паролі в базі даних, то спочатку шифруйте отриманий пароль. Якщо ж базі даних лежать відкриті паролі, то шифрувати зайве.
  3. Перевірити правильність введених даних, і якщо логін і пароль збігаються з існуючим користувачем у базі даних, записуєте в cookieабо сесію інформацію з логіном та шифрованим паролем (або відкритим паролем, якщо Ви його не шифрували).
  4. Якщо логін та/або пароль введені неправильно, робити редирект назад на форму авторизації.

Тепер у Вас є необхідна інформація про авторизації користувача, яка зберігається в його cookieабо на сервері (якщо сесія). Фактично, тепер Вам потрібно цю інформацію перевіряти на кожній сторінці сайту та звіряти її аналогічно до перевірки форми авторизації. Тобто зчитуєте з cookie(Сесії) логін та пароль, і перевіряєте його. Якщо вони вірні, то показуєте одну сторінку (для зареєстрованих користувачів), а якщо невірні, то показуєте іншу сторінку (для гостей).

І останнє. Як робиться кнопка " Вихід"? Дуже просто. При натисканні на цю кнопку, стираються cookie, чи сесія. Таким чином, користувач автоматично вилітає із сайту.

Як бачите, все елементарно, але при реалізації цього алгоритму у Вас обов'язково виникне безліч питань. Наприклад, що робити при реєстрації користувача, логін якого вже є в базі даних. Реалізація різноманітних перевірок вхідних даних, реалізація перевірки існування e-mailта інше – все це є досить складним, якщо Ви робите це вперше. Проте самий сік я видав. Якщо будуть питання при реалізації, запитуйте або на форумі, або в коментарях.

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

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

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

Створення об'єктів у базі даних

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

CREATE TABLE test.users(user_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, user_login VARCHAR(30) NOT NULL, user_password VARCHAR(32) NOT NULL, PRIMARY KEY (user_id)) ENGINE = MYISAM CHARAC

І давайте відразу ж додамо один запис до цієї таблиці:

Insert into test.users (user_login, user_password) values ​​("mylogin","202cb962ac59075b964b07152d234b70")

Разом у нас вийшло:

  • Логін- Mylogin;
  • Пароль -;

Ми пароль, звичайно ж, зберігатимемо у хешованому вигляді, тому що зберігати пароль у відкритому вигляді, м'яко сказати, не безпечно. У нас Вище хеш пароля 123, тому, коли вводитимемо пароль у форму, ми забиватимемо саме 123, а не.

Створення форми реєстрації

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

0) ( $error = "Користувач з таким логіном вже є"; ) // Якщо ні, то додаємо нового користувача if(!isset($error)) ( $login = mysql_real_escape_string(trim(htmlspecialchars($_POST["login) ])));// Забираємо пробіли і хешуємо пароль $password = md5(trim($_POST["password"])); mysql_query("INSERT INTO users SET user_login="". ".$password."""); echo "Ви успішно зареєструвалися з логіном - ".$login; exit(); ) else ( // якщо є такий логін, то говоримо про це echo $error; ) ) //по замовчуванням дані будуть надсилатися на цей же файл print<<< html

Логін
Пароль
html; ?>

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

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

Створення форми авторизації

"."Ви авторизовані
Тобто. ми перевірили сесію і можемо відкрити доступ до певних даних"; ) else ( $login = ""; //перевіряємо куку, може він уже заходив сюди if (isset($_COOKIE["CookieMy"]))( $login = htmlspecialchars( $_COOKIE["CookieMy"]);) // проста форма print<<< html

Логін
Пароль
html; ) ?>

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

AddType application/x-httpd-php .php .html

У IIS у вікні «Додавання зіставлення модуля» (Add Module Mapping) додайте до *.php ще й *.html через кому. Це якщо Ви робите у себе вдома на своєму web-сервері, а якщо Ви все це робите у хостера, то Вам доведеться писати їм і просити внести необхідні зміни, у деяких хостерів вони вже зроблені.

Код я прокоментував, тому я думаю, що все має бути зрозумілим. Ще раз нагадую у всіх файлах, вміст яких Ви не бажаєте показувати не авторизованим користувачам, потрібно писати session_start, ну і, мабуть, на цьому все. Якщо є питання, ставте у коментарях. Успіхів!

Від автора:рано чи пізно кожен веб-розробник стикається із завданням обмеження доступу до якоїсь сторінки/сторінок або каталогу. Це може бути просто секретна сторінка на сайті, адміністративна частина сайту або будь-який інший розділ, доступ до якого ми хочемо обмежити та надавати лише за паролем. Для цього можна, звичайно, користуватися засобами сервера. Думаю, на будь-якому сучасному хостингу є функція паролювання директорії, де можна створити користувача, призначити йому пароль і після паролювання директорії доступ до закритого каталогу буде надано тільки після правильного введення логіну і пароля. Але іноді хочеться написати щось самому, щось швидке, просте, але водночас надійне…

У цьому уроці ми спробуємо написати просту систему авторизації. У нас буде секретна сторінка — скажімо, це буде сторінка адміністратора, доступ до якої ми надаватимемо лише для авторизованого користувача. Наша система авторизації буде заснована на роботі механізму сесій. Перед продовженням цього уроку я рекомендую Вам ознайомитися з одним із попередніх уроків, у якому ми, зокрема, розглядаємо роботу сесій — .

Коротко всю роботу з сесіями можна поділити на 3 етапи:

Відкриття сесії. На всіх сторінках, де мається на увазі робота із сесіями, обов'язково має бути здійснено старт сесії функцією session_start().

Реєстрація сесійних змінних.

Розреєстрування сесійних змінних за допомогою функції unset() та закриття сесії функцією session_destroy().

Крок 1

Отже, для нашої роботи створимо 3 файли - Головна сторінка (index.php), Контакти (contact.php) та Адмінка (admin.php). Звертаю увагу на те, що розширення файлу, до якого ми обмежуватимемо доступ має бути. php. Як ви здогадалися, обмежувати доступ ми будемо до файлу admin.php. Код всіх файлів найпростіший - це своєрідне меню в рядок з посиланнями на інші сторінки, і під ним індивідуальний текст кожної сторінки, щоб ми могли відрізняти їх один від одного. Ось, наприклад, код індексної сторінки:

Головна | Контакти Адмінка


Це головна сторінка

Інші сторінки, як я сказав, відрізняються від неї лише текстом після тегу лінії. Я не став робити повноцінні сторінки з мета-тегами, оскільки наше завдання полягає лише в обмеженні доступу до якоїсь сторінки.

Крок 2

Поки що ми можемо вільно ходити по всіх сторінках, включаючи сторінку адмінки. Як же ми обмежимо доступ до неї? Який взагалі буде алгоритм? Ми будемо робити наступне: на самому початку сторінки ми перевірятимемо, чи є потрібна нам мітка в сесії або, простіше кажучи, чи існує певна сесійна змінна (також можна перевіряти чи значення сесійної змінної певному значенню). Якщо такої змінної немає, то користувач, який запитує цю сторінку, не авторизований, а значить ми здійснимо його редирект на сторінку авторизації, де йому буде запропоновано заповнити форму з ім'ям та паролем. Алгоритм гранично простий – реалізуємо його. Переходимо до файлу admin.php, відкриваємо в самому верху конструкцію PHP і напишемо такий код:

session_start();

if (! $_SESSION [ "admin" ] ) (

header ("Location: enter.php");

exit;

Давайте тепер прочитаємо цей код. По-перше, ми відкрили сесію, як Ви пам'ятаєте - це обов'язкова умова при роботі із сесіями. Далі, ми створили просту умову, яку можна прочитати так: "якщо в масиві $_SESSION не існує елемента admin - виконуватимемо блок дій, укладений в операторні дужки". А в блоці коду ми за допомогою функції header() робимо редирект користувача на сторінку enter.php (це сторінка авторизації). Після функції header() обов'язково завершуємо виконання скрипту за допомогою функції exit(). Якщо ж умова не виконається, тобто, в масиві $_SESSION буде елемент admin - це означає, що користувач вже успішно авторизований, і ми пропустимо блок дії в операторних дужках, тобто ніякого редиректу не відбуватиметься, і ми Покажемо запитану сторінку.

Крок 3

Тепер нам потрібно створити сторінку авторизації – enter.php. Для цього скопіюємо код, наприклад, сторінки contact.php, створимо новий файл і вставимо до нього скопійований код. Файл зберігаємо під назвою enter.php. Тепер на цій сторінці напишемо простеньку форму для введення логіну та паролю:

Головна | Контакти Адмінка


Це сторінка авторизації.
Username:
Password:

< p > < a href = "index.php" >Головна< / a > | < a href = "contact.php" >Контакти< / a > | < a href = "admin.php" >Адмінка< / a > < / p >

< hr / >

< br / >

< form method = "post" >

Username :< input type = "text" name = "user" / > < br / >

Password:< input type = "password" name = "pass" / > < br / >

< input type = "submit" name = "submit" value = "Увійти" / >

< / form >

Тут усе просто. У формі 2 поля: поле для введення логіну (йому ми дали ім'я «user») та поле для пароля (з ім'ям «pass»). Також ми створили кнопку (ім'я submit), за натисканням на яку будуть відіслані дані з форми. Дані надсилаються методом post - це ми вказали в атрибуті method тега form - і будуть оброблені на цій же сторінці. Тепер ми можемо спробувати зайти на сторінку адмінки. Якщо все зроблено без помилок, ми туди потрапити не зможемо, а незмінно будемо опинятися на сторінці авторизації.

Чудово!

Крок 4

Далі нам потрібно написати на сторінці з формою її обробник, який прийматиме дані з форми та порівнюватиме, чи збігаються логін та пароль із форми з тими, які є у нас. Для цього відкриємо вгорі сторінки авторизації конструкцію PHP та почнемо писати код. Для початку ми повинні відкрити сесію — адже саме тут ми створюватимемо мітку у сесії, якщо отримано вірні логін та пароль. На цій же сторінці ми зберігатимемо логін і пароль адміністратора. Зазвичай ці дані зберігаються у базі даних (БД), але ми будемо лише 1 користувач (адміністратор), тому зберігати його дані для входу до БД не зовсім раціонально. Якщо ж користувачів буде не один, тобто ми, наприклад, пишемо проект, в якому є реєстрація, то, звичайно ж, без БД у такому випадку обійтися буде складно.

Отже, наш логін буде «admin» і зберігати його будемо в змінній $admin. Пароль буде "mypass" і він зберігатиметься в змінній $pass. Але зберігати паролі у відкритому вигляді не прийнято – це суперечить принципам безпеки. Зберігати пароль ми будемо у зашифрованому вигляді, а зашифрувати його нам допоможе функція md5(). Ця функція шифрує рядок за спеціальним алгоритмом, і на виході ми отримуємо рядок із 32 символів (його називають хеш). Якщо ми зашифруємо рядок mypass (це можна зробити, наприклад, у файлі contact.php):

echo md5 ("mypass");

то на виході отримаємо рядок "a029d0df84eb5549c641e04a9ef389e5" - це і буде наш зашифрований пароль. Поки що код сторінки авторизації буде таким:

Головна | Контакти Адмінка


Це сторінка авторизації.
Username:
Password:

session_start();

$admin = "admin";

$pass = "a029d0df84eb5549c641e04a9ef389e5";

< p > < a href = "index.php" >Головна< / a > | < a href = "contact.php" >Контакти< / a > | < a href = "admin.php" >Адмінка< / a > < / p >

< hr / >

< br / >

< form method = "post" >

Username :< input type = "text" name = "user" / > < br / >

Password:< input type = "password" name = "pass" / > < br / >

< input type = "submit" name = "submit" value = "Увійти" / >

< / form >

Крок 5

Тепер перевіримо те, що ми отримали з форми з тим, що у нас є у змінних із логіном та паролем. Робити це ми будемо за умови лише в тому випадку, якщо натиснута кнопка форми. Як ми можемо перевірити це? Кнопка має ім'я («submit»), а дані ми передаємо методом post. Відповідно, ми можемо просто перевірити, чи існує елемент submit у масиві $_POST. Якщо є — кнопка була натиснута, і ми виконуватимемо дії з перевірки надісланих даних, інакше нічого робити не будемо. Після оголошення логіну та паролю пишемо умову:

if($_POST["submit"])( if( $admin == $_POST["user"] AND $pass == md5($_POST["pass"]))( $_SESSION["admin"] = $ admin; header("Location: admin.php"); exit; )else echo "

Логін або пароль невірні!

"; }

if ($ _POST [ "submit" ] ) (

if ($admin == $_POST ["user"] AND $pass == md5 ($_POST ["pass"])) (

$_SESSION ["admin"] = $admin;

exit;

) else echo "

Логін або пароль невірні!

" ;

Умову перевірки логіну і пароля ми зробили як би подвійним. Зроблено це за допомогою логічного оператора AND (його також можна записати в такий спосіб - &&). Умову можна прочитати так: «якщо(змінна $admin дорівнює елементу user в масиві $_POST І змінна $pass дорівнює хешу елемента pass в масиві $_POST) то (виконуємо блок дій)else виводимо на екран текст 'Логін або пароль неправильні!'

Якщо пара логін-пароль збігається, то ми реєструємо сесійну змінну $_SESSION["admin"] і перенаправляємо користувача на сторінку адмінки - admin.php.
Спробуємо тепер протестувати те, що ми створили. Якщо ми введемо свідомо неправдиві логін та пароль, то отримаємо попереджувальне повідомлення, що "Логін або пароль неправильні!". Спробуємо ввести правильні дані для входу. Якщо ми ніде не помилилися, після натискання на кнопку «Увійти» ми опинимося на сторінці адмінки.

Крок 6

Тепер залишилося дописати деякі дрібниці. Наприклад, ми зараз авторизовані в системі, але якщо ми введемо в адресному рядку адресу сторінки авторизації, спокійно потрапимо на неї і побачимо форму авторизації. Такого бути не повинно — форму має бачити лише неавторизований користувач. Як ми можемо це виправити? Пам'ятаємо, що на сторінці admin.php ми перевіряли, чи є мітка у сесії. Якщо її немає, ми переводили користувача на сторінку авторизації. Тут ми можемо зробити те саме, тільки навпаки. Тобто ми також перевіряємо, чи є мітка в сесії. Тільки тепер ми перекладатимемо користувача на сторінку адмінки, якщо така мітка є. Це, загалом, логічно. Якщо є мітка, то користувач вже авторизований, і ми його можемо перевести на сторінку адмінки. На сторінці enter.php після старту сесії допишемо такий код:

if($_SESSION["admin"])( header("Location: admin.php"); exit; )

if ($ _SESSION [ "admin" ] ) (

header ("Location: admin.php");

exit;

Тепер якщо авторизований користувач спробує ввести ім'я сторінки авторизації в адресний рядок — його буде переведено на сторінку адмінки. Не авторизований користувач зможе вільно потрапити на сторінку авторизації.

Крок 7

Наступний момент, який нам потрібно передбачити, — це реалізація виходу авторизованого користувача, тобто, припустимо, адміністратор закінчив свою роботу і потрібно вийти, щоб ніхто сторонній не зміг працювати під його обліковим записом. Для цього додамо на сторінці admin.php посилання «Вихід». Посилання буде вести на цю сторінку, тільки до неї буде додано потрібний нам параметр. Параметр додається за допомогою знака запитання:

Вихід

< a href = "admin.php?do=logout" >Вихід< / a >

Це посилання можна поставити в тому місці, де нам потрібно — я поставлю його після тексту сторінки. Щодо параметра – він буде переданий методом GET (згадуємо, що з форми ми передавали дані другим параметром – POST). При використанні цього методу дані приєднуються до адреси в адресному рядку і відокремлені від адреси саме знаком питання. Ми передаємо один параметр - do - і при цьому надали йому значення "logout". Як тепер ми можемо авторизувати користувача? Дуже просто тут нам допоможуть другий і третій етапи при роботі з сесіями. Під час завантаження ми можемо перевірити значення елемента do з масиву $_GET. Якщо воно дорівнюватиме рядку «logout» — ми просто розреєструємо сесійну змінну $_SESSION["admin"] і зруйнуємо сесію. Відповідно, мітки у сесії після цього не буде і в наступному блоці, де ми перевіряємо наявність мітки, користувач буде перенаправлений на сторінку авторизації. Все просто.

Всім привіт. Отже, ми вивчили кілька елементів створення форм. Настав час об'єднати наші знання для вирішення більшого завдання. Давайте створимо найпростішу форму для авторизації на сайті. Для цього нам потрібні два поля, робимо та прив'язуємо до них підписи.

Перше поле – для логіну, друге – для пароля. І ось із другим не все так просто. Оскільки на даний момент воно є просто полем для введення тексту.

Результат у браузері:

Щоб введений у ньому текст замінювався на зірочки, як це заведено для поля такого типу, необхідно зробити одну просту дію. А саме, здійснити заміну значення атрибуту typeна password:

Результат:

Кнопка відправлення форми

Ну ось. Наша форма вже майже готова. Тепер, щоб завершити її створення, необхідно зробити кнопку, якою буде здійснюватись відправлення форми. Завдання вирішується із застосуванням тега з типом submit.

Якщо на кнопці має бути якийсь напис, то його можна зробити, використовуючи атрибут value. Задавати ім'я кнопці чи ні – на ваш розсуд, то якщо ви це зробите, сервер буде отримувати це ім'я, а також значення кнопки.

Як правило, в імені кнопки відправки форми є потреба тоді, коли форма має кілька кнопок, кожна з яких виконує певну дію. Завдяки цьому сервер, отримуючи від браузера ім'я та значення кнопки, розуміє, яку саме кнопку натиснув користувач і що, відповідно, необхідно виконати.

У результаті код нашої форми вийде наступним:

Результат у браузері:

Отже, є завдання зробити реєстрацію в системі і можливість авторизації. Як це робити? Почнемо по порядку.

Реєстрація на php

Тут усе просто. Робиться сховище для користувачів. Зазвичай це таблиця БД. До неї входять такі поля як id, username і password. Інші поля опціональні. Ви можете збирати e-mail користувачів, їх адреси, можливі IP, час виходу в мережу, кодові слова від банківських карток, секретні питання...

Загалом головне — це пара логін-пароль.

Перший важливий момент— Не можна зберігати паролі користувачів у відкритому вигляді. Тобто як текст. Не можна тому, що якщо до БД отримає доступ хтось сторонній, він отримає базу логін-паролей користувачів, що навряд чи їм сподобається. А якщо врахувати, що логін-пароль у багатьох користувачів на різних сервісах одні й ті самі — це ставить під загрозу і особисті дані та фінанси та особисте листування і все, що завгодно.

Паролі треба зберігати як хеша. Хешування— це операція, яка перетворює вихідні дані на якийсь зліпок відомої довжини. Це добре тим, що зліпок є унікальним. Тобто, якщо ми змінимо у вихідних даних хоча б один символ - зліпок на виході операції хешування вийде зовсім, невпізнанним іншим. Операція хешування необоротна, тобто з цього зліпка не вдасться розгорнути вихідні дані. Цим воно і відрізняється від шифрування.

У MySQL і php є та сама поширена і безпечна функція хешування — md5. Цей алгоритм приймає дані та віддає відбиток.

Отже, ми отримуємо дані від користувача, перевіряємо чи не порожні вони, чи не містять будь-яких непотрібних нам символів (не обмежуйте користувачів занадто сильно). І тепер робимо запит на кшталт цього:

INSERT INTO `users` (`id`, `username`, `password`) VALUES("",$quoted_username,MD5($quoted_password));

Зверніть увагу – я спеціально обізвав змінні $quoted_ тому що перед запиханням їх у запит їх обов'язково треба обескейпити функцією mysql_real_escape_string(). Так як ця функція дуже часто використовується, а пишеться дуже довго (люблю архітекторів ПХП) - я рекомендую запхати її в свою оболонку. Наприклад, так:

Function quote($var) ( return mysql_real_escape_string($var); )

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

Ми додали нового користувача, і тепер він авторизується. Ми малюємо йому форму логіна-паролю та ловимо його дані. Що далі? Адже пароль нам прийшов у відкритому вигляді, а в базі – хеш пароля. Чи доведеться конвертувати пароль у хеш, потім порівнювати їх? Ні, можна зробити простіше – в один запит.

SELECT * FROM `users` WHERE `login`=$qoted_login AND `password`=MD5($quoted_password);

Якщо запит поверне рядок, це буде рядок з даними користувача. Якщо ні – такого користувача в таблиці немає. Дані користувача нам знадобляться — варто їх отримати в асоціативний масив.

Запам'ятати користувача

Тепер нам треба запам'ятати, що користувач авторизований і точно знати хто це. Перше що спадає на думку — використовувати для цього куки. Справді - запхати в куки логін і ID користувача і завжди знати хто запитує сторінку в даний момент.

Але це хибна практика. Чому? Тому що cookie – це файл, який зберігається у користувача в браузері і дані з цього файлу передаються серверу у кожному запиті. По-перше, вони передаються як текст, а це означає їх легко перехопити. По-друге, це простий текст, що надсилається користувачем. Тому його можна буквально переписати. Наприклад, якщо ми вирішили зберігати в куках логін користувача "Вася" він може відкрити керування куками у своєму браузері, знайти потрібну куку і виправити її на, скажімо, "Admin". І все. Тепер при кожному запиті ми отримуватимемо куку, яка нам буде повідомляти юзернейм користувача - "Admin".

Тому безпечніше зберігати всі дані на сервері у недоступному з Інтернету місці. В якійсь папці, до якої не можна отримати доступ із браузера. У цю папку потрібно писати всі дані про користувача та читати їх звідти щоразу, коли він запитує документ. Щоб дізнатися якому користувачеві належить якийсь файл даних - треба обзивати файл унікальним ім'ям і ось це ім'я кидати вже користувачеві в куки. Таким чином, користувач не зможе дізнатися, як називається файл для користувача Admin - цей файл генерує система на сервері. І це дозволяє тягати від документа до документа хоч паролі у відкритому вигляді.

Те, що я описав — це механізм сесії. У Perl, наприклад, для використання сесій потрібно завантажувати модулі. А у php сесії підтримуються із коробки. Фактично, все, що вам потрібно знати - це функція session_start() і масив $_SESSION. Це все. Зараз розкажу.

У кожному скрипті, де ви писатимете в сесію або читатимете з неї, вам треба до того, як ви виведете якусь інформаціювикликати функцію session_start(). Це запустить сесію. Ця функція створить файл сесії, якщо його немає або прочитає його, якщо скрипту була передана спеціальна кука.

Щоб записати в сесію дані потрібно просто записати в масив $_SESSION. Тепер нам треба пам'ятати id користувача.

$_SESSION["userid"] = $userinfo["id"];

Всі. Тепер щоразу, коли користувач буде запитувати скрипт, який використовує сесії, вам буде доступне значення елемента $_SESSION["userid"].

Тому коли користувач ввів логін та пароль, ми отримали його дані з БД, що підтверджує, що такий користувач є в нашій базі даних, ми запам'ятовуємо його в сесії.

Дізнатись чи авторизований користувач

Ну, це вже простіше простого! Тепер, коли ви знаєте як працюють сесії — дізнатися чи авторизований користувач — справа одного рядка. Ось вона:

If(isset($_SESSION["userid"])) ( print "користувач авторизований"; )

Якщо в сесії визначено ID користувача, значить він уже пройшов авторизацію. Але як дізнатися, який саме це користувач? Який його логін? Дата народження? Кодове слово для банківської картки? Дівоче прізвище матері?

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

SELECT * FROM `users` WHERE `id` = $quoted_userid

Як розлогінити користувача, зробити вихід

Ну, це вже зовсім просто. Якщо ми визначаємо чи авторизований користувач за наявністю userid в сесії, то щоб його розлогінити потрібно видалити його звідти. Робиться так:

Unset($_SESSION["userid"]);

Ще можна вбити сесію для вірності. Це очистить куку користувача і знищить файл сесії на сервері. При цьому з неї пропадуть усі дані. Робиться так:

Session_destroy();

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

Спонсор цього посту – ibooknet.ru, який пропонує ремонт ноутбуків за приємними цінами. Особисто мій ноут гаразд і сподіваюся, мені не доведеться його лагодити. Чого й вам бажаю.