Ако трябва да направите една от секциите на вашия сайт достъпна за ограничен, но неопределен кръг от хора, най-лесният начин да направите това е като се регистрирате и оторизирате потребители. Има много начини за упълномощаване на потребители. Можете да използвате както инструменти за уеб сървър, така и инструменти за език за програмиране. Ще говорим за случая, когато се използват PHP сесии.

Може би бихте искали да видите повече модерен начинсъздаване на такава форма. Все още имам планове за цялостното му модерно и актуално представяне, но виждате, че формата обратна връзкаможе да се изгради с помощта на обектно-ориентирани трикове в PHP.

Като начало нека обсъдим всички стъпки, които ще предприемем по-нататък. Какво наистина ни трябва? Имаме нужда от скрипт, който ще регистрира потребителя, ще го упълномощи, ще го пренасочи някъде след упълномощаване. Също така ще трябва да създадем страница, която ще бъде защитена от достъп от неупълномощени потребители. За регистрация и оторизация ще трябва да създадем HTML форми. Ние ще съхраняваме информация за регистрираните потребители в база данни. Това означава, че все още се нуждаем от скрипт за свързване на СУБД. Цялата работа ще изпълняваме функции, които сами пишем. Ще запазим тези функции в отделен файл.

Така че имаме нужда от следните файлове:

  • връзка със СУБД;
  • потребителски функции;
  • упълномощаване;
  • Регистрация;
  • защитена страница;
  • скрипт за изключване на потребителя;
  • скрипт, който проверява статуса на оторизация на потребителя;
  • стилов лист за най-опростен дизайн на нашите страници.

Всичко това ще бъде безсмислено, ако нямате съответстваща таблица в базата данни. Стартирайте вашия инструмент за управление на СУБД (PhpMyAdmin или командна линия, както е по-удобно) и изпълнете следната заявка в него:

CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` char(16) NOT NULL, `password` char(40) NOT NULL, `reg_date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (` id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Ще именувам нашите скриптови файлове по следния начин (всички те ще бъдат в една и съща директория):

  • база данни.php
  • functions.php
  • login.php
  • регистрация.php;
  • index.php;
  • излизане.php;
  • checkAuth.php;
  • style.css

Целта на всеки от тях, сигурен съм, че разбирате. Нека започнем със скрипта за свързване на СУБД. Вече сте го виждали. Просто запазете този код на скрипта във файл, наречен database.php. Ще декларираме персонализирани функции във файла functions.php. Как ще работи всичко? Неоторизиран потребител се опитва да получи достъп до защитен документ index.php, системата проверява дали потребителят е оторизиран, ако потребителят не е оторизиран, той се пренасочва към страницата за оторизация. На страницата за оторизация потребителят трябва да види формуляр за оторизация. Нека го направим.

Упълномощаване на потребителя

регистрирам.

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

/* style.css файл */ .row ( margin-bottom:10px; width:220px; ) .row label ( display:block; font-weight:bold; ) .row input.text ( font-size:1.2em; padding:2px 5px;) .to_reg (font-size:0.9em;) .instruction (font-size:0.8em; color:#aaaaaa; margin-left:2px; cursor:default;) .error (color:red; margin-left:3px; )

Ако всичко е направено правилно, трябва да имате следното във вашия браузър:

Разбира се, все още нямаме нито един регистриран потребител и за да влезете, трябва да се регистрирате. Да направим форма за регистрация.

Регистрация на потребител

" />

Може би сте забелязали, че PHP променливите присъстват в HTML кода. Те са съдържанието на атрибутите на текстовото поле на формуляра, съдържанието на контейнерите за грешки. Но ние не сме инициализирали тези променливи. Нека го направим.

Регистрация на потребител

" />
Потребителското име може да съдържа само латински букви, цифри, символи "_", "-", ".". Дължината на потребителското име трябва да бъде най-малко 4 знака и не повече от 16 знака
В паролата можете да използвате само латински букви, цифри, символи "_", "!", "(", ")". Паролата трябва да е най-малко 6 знака и не по-дълга от 16 знака
Повторете въведената преди това парола

Атрибутът за действие на маркера на формуляра няма зададен параметър. В този случай, когато данните от формуляра се подадат, те ще бъдат обработени в същия скрипт, от който са изпратени. Така че трябва да напишем кода, който обработва данните от формуляра. Но нека първо обсъдим алгоритъма за обработката им.

Необходимо е полетата за вход и парола да не са празни. След това трябва да проверите влизането за съответствие с изискванията. Паролата също трябва да отговаря на описаните изисквания, а повторно посочената парола трябва да отговаря на нея и освен това да са идентични. Ако някое от тези условия не е изпълнено, обработката на данните от формуляра трябва да бъде прекратена, в масива от съобщения за грешка трябва да се запише подходящо предупреждение и то да се покаже на потребителя. За удобство на потребителя ще запазим въведеното от него име (ако го е посочил), като записваме стойността му в масива $fields.

Ако всичко е наред, в прозореца на браузъра ви, препращайки към документа registration.php, трябва да видите нещо подобно:

Сега, да кажем, че потребителят е щракнал върху бутона за регистрация, не е попълнил полетата на формуляра. Според нашия алгоритъм данните за вход и парола не могат да бъдат празни. Ако това условие не е изпълнено, регистрацията не е възможна. Имаме предвид, че обработката на данни от формуляри се извършва в текущия сценарий. Така че трябва да променим кода му, като добавим съответните проверки. Нека веднага обсъдим следните проверки. Ако са въведени както потребителско име, така и парола, трябва да проверите съответствието им с посочените изисквания. За да проверим данните за вход и парола, ще създадем потребителски функции във файла functions.php.

/** * functions.php * Файл с персонализирани функции */ // Свържете файла с параметри за връзка към СУБД require_once("database.php"); // Проверка на функцията за потребителско име checkLogin($str) ( // Инициализиране на променлива с възможно съобщение за грешка $error = ""; // Ако няма низ за влизане, върнете съобщение за грешка if(!$str) ( $error = " Не сте въвели потребителско име"; return $error; ) /** * Проверка на потребителското име с помощта на регулярни изрази * Входът трябва да бъде не по-кратък от 4, не по-дълъг от 16 знака * Трябва да съдържа латински символи, цифри, * може да са знаци "_", "-", "." */ $pattern = "/^[-_.a-z\d](4,16)$/i"; $result = preg_match($pattern, $ str); // Ако проверката е неуспешна, връща съобщение за грешка if(!$result) ( $error = "Невалидни знаци в потребителското име или потребителското име е твърде кратко (дълго)"; return $error; ) // Ако всичко е добре, връща вярно връща истина; ) // Проверка на функцията за потребителска парола checkPassword($str) ( // Инициализиране на променлива с възможно съобщение за грешка $error = ""; // Ако липсва въведен низ с логин, връща съобщение за грешка if(!$str) ( $error = "Не сте въвели парола"; връща $ грешка; ) /** * Проверете паролата на потребителя с помощта на регулярни изрази * Паролата не трябва да е по-къса от 6, не по-дълга от 16 знака * Трябва да съдържа латински знаци, цифри, * може да съдържа знаци "_", "!", " (", ")" */ $pattern = "/^[_!)(.a-z\d](6,16)$/i"; $result = preg_match($pattern, $str); // Ако има отметка неуспешно, връща съобщение за грешка if(!$result) ( $error = "Невалидни знаци в потребителската парола или паролата е твърде кратка (дълга)"; return $error; ) // Ако всичко е наред, return true return true; )

Сега трябва да модифицираме файла registration.php, за да използваме декларираните от нас функции. Ще добавим условие към скрипта, което проверява за щракване върху бутона за регистрация. В това условие се стартира проверка за вход и парола. Ако някоя от проверките е неуспешна, изобразяваме отново формуляра и показваме съобщение за грешка. Ако няма грешки, ние регистрираме потребителя, докато формулярът за регистрация вече не се показва, информираме потребителя за успешна регистрация и използваме функцията header(), за да го пренасочим към формуляра за оторизация.

Регистрирахте се успешно в системата. Сега ще бъдете пренасочени към страницата за вход. Ако това не се случи, отидете на него чрез директна връзка.

"; header("Refresh: 5; URL = login.php"); ) // В противен случай кажете на потребителя за грешката else ( $errors["full_error"] = $reg; ) ) ) ?> Регистрация на потребител
" />
Потребителското име може да съдържа само латински букви, цифри, символи "_", "-", ".". Дължината на потребителското име трябва да бъде най-малко 4 знака и не повече от 16 знака
В паролата можете да използвате само латински букви, цифри, символи "_", "!", "(", ")". Паролата трябва да е най-малко 6 знака и не по-дълга от 16 знака
Повторете въведената преди това парола

Трябва да сте забелязали още една нова функция в скрипта - registration() . Все още не сме го обявили. Нека го направим.

// Функция за регистрация на потребител, функция регистрация ($login, $password) ( // Инициализиране на променлива с възможно съобщение за грешка $error = ""; // Ако няма низ за влизане, върнете съобщение за грешка if(!$login) ( $ error = "Login not specified"; return $error; ) elseif(!$password) ( $error = "Password not specified"; return $error; ) // Проверете дали потребителят вече е регистриран // Свържете се с DBMS connect() ; // Напишете низ на заявка $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // Направете заявка към база данни $query = mysql_query($ sql) или die( ""); // Вижте броя на потребителите с това влизане, ако има поне един, // връща съобщение за грешка if(mysql_num_rows($query) > 0) ( $error = "The потребител с посоченото име за влизане вече е регистриран"; връща $ грешка; ) // Ако няма такъв потребител, регистрирайте го // Напишете низа на заявката $sql = "INSERT INTO `users` (`id`,`login`, `парола`) СТОЙНОСТИ (NULL, "" . $login . " "," ". $парола. "")"; // Направете заявка към базата данни $query = mysql_query($sql) или die("

Не може да се добави потребител: " . mysql_error() . ". Възникна грешка на реда ". __LINE__."

"); // Не забравяйте да прекъснете връзката с СУБД mysql_close(); // Връщане true, показващо успешна регистрация на потребител, връщане true; )

Ако всичко е наред, вашият потребител ще бъде регистриран. Можете да тествате формата. Опитайте да регистрирате потребители с едни и същи данни за вход. След успешна регистрация, потребителят ще бъде пренасочен към формата за оторизация. Преди това просто създадохме маркирането, за да покажем този формуляр. Тъй като в неговия атрибут за действие не е посочен параметър, данните, изпратени от формуляра, ще бъдат обработени в същия скрипт. Така че трябва да напишем кода за обработка и да го добавим към документа login.php.

Упълномощаване на потребителя

;">

Ако не сте регистрирани в системата, моля регистрирайте се.

Може би сте забелязали, че вече имаме друга непозната функция в скрипта за оторизация — authorization() . Тази функция трябва да упълномощи потребителя, като първо провери дали има регистриран потребител в базата данни със същото име и парола. Ако такъв потребител не бъде намерен, оторизацията ще бъде прекратена и на екрана ще се покаже съобщение за грешка. При успешна проверка функцията authorization() ще стартира сесията и ще запише стойностите за вход и парола на потребителя в нея, ще информира скрипта за успеха на авторизацията и скриптът ще пренасочи потребителя към защитена ресурсна страница.

/** * Функция за оторизация на потребителя. * Упълномощаването на потребителите ще се извършва * чрез PHP сесии. */ function authorization($login, $password) ( // Инициализиране на променлива с възможно съобщение за грешка $error = ""; // Ако няма низ за влизане, върнете съобщение за грешка if(!$login) ( $error = " Входът не е посочен"; върне $error; ) elseif(!$password) ( $error = "Паролата не е посочена"; return $error; ) // Проверете дали потребителят вече е регистриран // Свързване към СУБД connect( ); // Трябва да проверим дали има такъв потребител сред регистрираните // Съставете низа на заявката $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" И `password`="".$password ."""; // Изпълнение на заявката $query = mysql_query($sql) или die("

Не може да се изпълни заявка: " . mysql_error() . ". Възникна грешка на реда ". __LINE__."

"); // Ако няма потребител с такива данни, връща съобщение за грешка if(mysql_num_rows($query) == 0) ( $error = "Потребителят с посочените данни не е регистриран"; връща $error; ) // Ако потребителят съществува, стартирайте сесията session_start(); // И запишете данните за вход и паролата на потребителя в нея // За да направим това, ние използваме суперглобалния масив $_SESSION $_SESSION["login"] = $login; $ _SESSION["password"] = $password; / / Не забравяйте да затворите връзката с базата данни mysql_close(); // Върнете true, за да докладвате за успешна авторизация на потребителя return true; )

Когато потребител влезе в защитена страница, трябва да проверите коректността на неговите данни за оторизация. За да направим това, имаме нужда от още една функция, дефинирана от потребителя. Нека го наречем checkAuth(). Неговата задача ще бъде да проверява данните за оторизация на потребителя с тези, съхранявани в нашата база данни. Ако данните не съвпадат, потребителят ще бъде пренасочен към страницата за оторизация.

Функция checkAuth($login, $password) ( // Ако няма потребителско име или парола, върнете false if(!$login || !$password) върнете false; // Проверете дали такъв потребител е регистриран // Свържете се към СУБД connect(); // Съставете низа на заявката $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`=".$password."""; // Изпълнение на заявката $ query = mysql_query($sql) или die("

Не може да се изпълни заявка: " . mysql_error() . ". Възникна грешка на реда ". __LINE__."

"); // Ако няма потребител с такива данни, върнете false; if(mysql_num_rows($query) == 0) ( return false; ) // Не забравяйте да затворите връзката към базата данни mysql_close(); // В противен случай връща вярно връща вярно; )

Сега, когато потребителят е попаднал на защитена страница, трябва да извикаме функцията за валидиране на данните за оторизация. Ние ще поставим скрипта за повикване и проверка в отделен файл checkAuth.php и ще го свържем към онези страници, които ще бъдат затворени за обществен достъп.

/** * Скрипт за проверка на авторизацията на потребител */ // Стартиране на сесията, от която ще извлечем данните за вход и парола // на оторизирани потребители session_start(); // Включете файл с персонализирани функции require_once("functions.php"); /** * За да определим дали даден потребител е влязъл, трябва * да проверим дали съществуват записи в базата данни за неговото потребителско име * и парола. За да направим това, ще използваме персонализираната функция *, за да проверим коректността на данните на оторизирания потребител. * Ако тази функция върне false, тогава няма разрешение. * Ако няма оторизация, ние просто пренасочваме * потребителя към страницата за оторизация. */ // Ако сесията съдържа данни за вход и парола, // проверете ги if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password" ]) && $_SESSION["password"]) ( // Ако валидирането на съществуващи данни е неуспешно if(!checkAuth($_SESSION["login"], $_SESSION["password"])) ( // Пренасочване на потребителя към заглавката на страницата за вход ("location: login.php"); // Прекратете изпълнението на изхода от скрипта; ) ) // Ако няма данни за вход или парола на потребителя, // считаме, че няма оторизация, пренасочете потребител // към страницата за оторизация else ( header("location: login.php"); // Спрете изпълнението на скрипт exit; )

Сега нека създадем кода за нашата защитена страница. Ще бъде доста просто.

Авторизация и регистрация на потребители

Успешна авторизация.

Осъществихте достъп до защитена страница. Можете да излезете.

Както можете да видите, в защитения документ включваме само един файл - checkAuth.php. Всички други файлове са включени в други сценарии. Следователно нашият код не изглежда обемист. Имаме организирана регистрация и авторизация на потребители. Сега трябва да позволите на потребителите да излязат. За да направим това, ще създадем скрипт във файла logout.php.

/** * Скрипт за излизане на потребителя. Тъй като потребителите са * оторизирани чрез сесии, тяхното потребителско име и парола се съхраняват * в суперглобалния масив $_SESSION. За да излезете * от системата, просто унищожете * стойностите на масивите $_SESSION["login"] и $_SESSION["password"], * след което пренасочваме потребителя към страницата за вход */ // Бъдете със сигурност ще стартирате сесията session_start(); unset($_SESSION["вход"]); unset($_SESSION["парола"]); заглавие ("местоположение: login.php");

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

P.S. Наясно съм, че е по-добре да се пише обектно-ориентиран код, знам, че не си струва да се предава и съхранява паролата в чист текст, че информацията, въведена в базата данни, трябва първо да се провери. Знам. Няма да говоря за това тук.

Като част от услугата Personal Web Server, сайтовете, хоствани на акаунт, могат да бъдат стартирани не само на главния уеб сървър, но и на собствения им екземпляр на уеб сървъра Apache, чиито процеси са винаги готови да обработват заявки към сайта.

В допълнение към оптимизирането на обработката на заявки, персоналният уеб сървър ви позволява да използвате софтуер, който не е наличен на обикновен уеб сървър: PHP ускорители, цялостно решение за подобряване на производителността на проекти, управлявани от 1C-Bitrix CMS, и PHP скрипт инструмент за отстраняване на грешки.

Услугата е достъпна за използване на всички текущи тарифни планове, можете да я свържете в секцията "Уеб сървър" на контролния панел на хостинга.

Принцип на действие


Техническият хостинг сайт има двустепенна конфигурация на уеб сървъра. Общият уеб сървър на Apache, след като е приел заявка от Nginx, е принуден да създаде нов дъщерен процес и да го прекрати, когато заявката бъде обработена.

Личният уеб сървър значително опростява взаимодействието на акаунт с основния процес на Apache: определен брой процеси на личен уеб сървър винаги се изпълняват под потребителското име на хостинг акаунта, които имат само две състояния: „заето“ или „свободно“.

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

Възможности

  • Изпълнение на уеб сървъра Apache с допълнителни модули, които не са налични в обикновените споделени хостинг акаунти.
  • Рестартиране на личния уеб сървър от контролния панел.
  • Използване на PHP ускорители, които значително ускоряват работата на различни CMS: Zend OPCache, APC, xCache и eAccelerator.
  • Управление на PHP разширения: Zend Optimizer, ionCube Loader, xDebug.
  • Оптимизиране на проекти под контрола на CMS 1C-Bitrix чрез настройка на PHP среда, отговаряща на изискванията на CMS.
  • По-добра производителност от общ уеб сървър, като процесите на заявки се изпълняват през цялото време.

Препоръчваме използването на услугата "Персонален уеб сървър", когато хоствате сериозни проекти със среден и висок трафик или проекти, които изискват нестандартни настройки на средата и разширени възможности за администриране на сайта.

Контрол на версиите на уеб сървъра

PHP

PHP (препроцесор за хипертекст)- най-известният и разпространен език за разработка на уеб приложения. Версията на PHP се настройва чрез персонално управление на уеб сървър (достъпно от 5.2 до 7.1 включително). Препоръчителната версия на PHP, която отговаря на изискванията на повечето CMS и разширения, е PHP 5.6. Списъкът с текущи версии се актуализира своевременно.

uWSGI (Python)

WSGI (интерфейс на шлюз на уеб сървър)е популярен стандарт за взаимодействие между програма на Python, работеща от страната на сървъра, и самия уеб сървър на Apache. Изисква се за проекти, написани на Python.

Node.js

Node.js- софтуерна платформа за изпълнение на JavaScript код. Node.js позволява на JavaScript да взаимодейства с устройства чрез своя API, да свързва външни библиотеки на различни езици и да предоставя извиквания към тях от JavaScript код.

Използване на PHP ускорители

PHP ускорителите са разширения, които съхраняват компилиран код на PHP скрипт в паметта за бързо изпълнение при следващото му извикване. Те ви позволяват значително да ускорите изпълнението на PHP скриптове и да намалите ресурсите на уеб сървъра, необходими за това (според някои оценки - с 5-20 пъти).

При нормалния начин на работа на PHP всеки скрипт трябва да бъде компилиран в машинен код преди изпълнение и едва след това да се стартира. Компилирането се извършва при всеки достъп до скрипта, т.е. при всяко показване на страницата компилирането на скрипта започва отново. Отнема време и ресурси на процесора за компилиране на скрипта. PHP ускорителите съхраняват компилираната версия на скрипта в RAM. Така при следващи извиквания на скрипта не се изисква компилация и PHP незабавно започва да изпълнява машинния код. Кеширането спестява ресурси на процесора и намалява времето, необходимо за изобразяване на страница.

В допълнение към основната функция - кеширане на скриптове - ускорителите също предоставят скриптове с възможност за съхраняване на произволни променливи в RAM за по-късен бърз достъп. Механизмите за кеширане на страници в много системи за управление на съдържанието (CMS) се основават на тази функция, което значително ускорява тяхната работа.

При използване на личен уеб сървър са налични четири ускорителя, които осигуряват кеширане на PHP скриптове.

Zend OPCache

Zend OPCache- ускорява работата на сайтове на езика PHP чрез използване на техниката за кеширане на компилирани скриптове (opcode) в RAM и прилагане на допълнителни оптимизации. Тестването на приложението на този ускорител показа най-оптималните резултати за повечето CMS във връзка с PHP 5.6.

APC

APC (алтернативен PHP кеш)- софтуер с отворен код за кеширане на резултата от PHP скриптове. Препоръчително е да използвате APC cacher за подобряване на производителността на сайтове, създадени на популярни CMS като Joomla, WordPress, Drupal, UMI.CMS. PHP 5.6 и 7.0 поддържат ускорителни модули APCu и APCu-bc.

eAccelerator

eAccelerator- изпълнява функциите на ускорител, оптимизатор и разопаковач и има вградени функции за динамично кеширане на съдържание. Според резултатите от тестовете, проведени с представители на производители на CMS, eAccelerator се препоръчва за използване със CMS „1C-Bitrix: Управление на сайтове“ и популярния HostCMS.

xCache

xCache- ефективен за проекти с голямо натоварване. Ускорителят xCache е достъпен само при използване на CMS, чиито производители го препоръчват.

Активирането на ускорителя предполага, че акаунтът използва допълнителна област от паметта, предназначена за кеширане на данни. Обемът памет, наличен за използване, се определя от тарифния план и е посочен в съответния раздел на сайта.

PHP модули и разширения

ZendOptimizer

Zend Optimizer- приложение от Zend Technologies Ltd. Разширението Zend Optimizer е модул от страна на сървъра, който се използва за изпълнение на скриптове, кодирани със Zend Encoder и Zend SafeGuard Suite, като значително увеличава тяхната скорост. Предлага се само за PHP 5.2.

ionCube Loader

ionCube Loader- софтуер, необходим за декодиране на изходния код, кодиран с помощта на технологията ionCube Encoder. Като цяло наборът от помощни програми на ionCube (Encoder и Loader) ви позволява да кодирате, объркате и лицензирате PHP изходния код.

xDebug

xdebug- Софтуер с отворен код, необходим на опитни разработчици за отстраняване на грешки в скриптове на сайтове. Включването на ресурсоемката помощна програма xDebug реализира възможността за регистриране, в което ще бъдат записани всички действия, от достъп до сайта от браузъра до получаване на готовата страница: изпълнение на вътрешни скриптове, генериране на SQL заявки, достъп до сайта до трети партийни средства и др.

Оптимизация за "1C-Bitrix"

Популярната система за управление на съдържанието "1C-Bitrix" има редица системни изисквания за хостинг сайта, включително настройката на многобайтови низове, които в съвременните версии на PHP трябва да се променят само чрез файла php.ini. Както опитни разработчици, така и начинаещи потребители ще могат да конфигурират механизма за претоварване на функцията mbstring.func_overload и поддържаното кодиране на знаци mbstring.internal_encoding, като изберат необходимата версия в списъка за оптимизация на 1C-Bitrix.

В резултат на тестване на производителността на сайта под контрола на 1C-Bitrix, най-добри резултати бяха постигнати при използване на препоръчаното кеширане с помощта на ускорителя ZendOPCache във връзка с PHP 5.6.

За да влязат в сила настройките, трябва да приложите желаната настройка и да рестартирате личния уеб сървър.

Обратни резултати (0)

Актуализирано на: 2018-03-12

Публикувано на: 2016-12-21

С течение на времето PHP добавя функции, които насърчават разработването на сигурни приложения, както и отхвърлени или премахнати функции, които улесняват писането на несигурен код.

Прочетете този урок, за да научите как да създадете модерна система за влизане и регистрация, която се възползва от функциите, насочени към сигурността на PHP, и използва jQuery за изпращане на AJAX заявки и Bootstrap, за да предостави бърз и приятен потребителски интерфейс, който може да работи независимо дали използвате други рамки или не.



Ако имате въпроси или коментари, можете да публикувате съобщение като коментар към тази статия или в нейните.

Дневник на промените

2017-03-27: Добавена е още информация за изтегляне и инсталиране с помощта на инструмента за композиране.

2017-01-01: Актуализирана е статията, за да отрази, че това продължават да бъдат сигурни практики през 2017 г.




Трябва да сте регистриран потребител или да влезете, за да публикувате коментар

Влезте незабавно с вашия акаунт на:

Добър ден приятели! Нека да разгледаме регистрацията на потребители в PHP. Първо, нека дефинираме условията за нашата потребителска регистрация:

  • Паролата е криптирана с помощта на алгоритъм MD5
  • Паролата ще бъде "сол"
  • Проверка заетост при влизане
  • Активиране на потребителя с писмо.
  • Записване и съхранение на данни в СУБД MySQL

За да напишем този скрипт, трябва да разберем какво е регистрация на потребител. Регистрацията на потребител е получаване на реални потребителски данни, обработка и съхранение на данни.

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

Упълномощаване - предоставяне на определено лице или група лица на правата за извършване на определени действия, както и процесът на проверка на тези права при опит за извършване на тези действия. Най-просто казано, с помощта на оторизация можем да ограничим достъпа до определено съдържание на нашия сайт.

Нека да разгледаме структурата на директорията на скрипта, за да приложим нашето влизане с оторизация. Трябва да разделим скриптовете на логически части. Поставихме модулите за регистрация и авторизация в отделна директория. Също така ще поставим връзката към базата данни в отделни директории. MySQL, файл с персонализирани функции, стилов файл cssи нашия шаблон HTML. Тази структура ви позволява бързо да навигирате през скриптове. Представете си, че имате голям сайт с куп модули и т.н. и ако няма ред, ще бъде много трудно да се намери нещо в такава бъркотия.

Тъй като ще съхраняваме всички данни в СУБД MySQL, тогава нека създадем малка таблица, в която ще съхраняваме регистрационни данни.

Първо трябва да създадете таблица в базата данни. Да извикаме масата bez_regкъдето безе префиксът на таблицата и региме на таблица.

Структура на таблицата: bez_reg

-- -- Структура на таблицата `bez_reg` -- СЪЗДАВАНЕ НА ТАБЛИЦА, АКО НЕ СЪЩЕСТВУВА `bez_reg` (`id` int(11) NOT NULL AUTO_INCREMENT, `login` varchar(200) NOT NULL, `pass` varchar(32) NOT NULL , `salt` varchar(32) NOT NULL, `active_hex` varchar(32) NOT NULL, `status` int(1) NOT NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Сега нека създадем основните скриптове за по-нататъшна работа.

INDEX.PHP ФАЙЛ

CONFIG.PHP ФАЙЛ

"); ?>

Файл 404.HTML

Грешка 404

Грешка 404

Имаше грешка 404 на страницата

Връщане

BD.PHP файл

INDEX.HTML ФАЙЛ

Регистрация на PHP MySQL потребител с имейл за активиране

FUNCT.PHP ФАЙЛ

"."\n"; if(is_array($data)) ( foreach($data as $val) $err .= "

  • ".$val."
  • "."\n"; ) else $err .= "
  • ".$данни."
  • "."\n"; $err .= ""."\n"; return $err; ) /**Обвивка на проста MySQL заявка * @param низ $sql */ функция mysqlQuery($sql) ( $res = mysql_query($sql); /* Проверка на резултата Това показва действителната заявка, изпратена до MySQL, както и грешката.*/ if(!$res) ( $message = "Лоша заявка: " . mysql_error() . "\n"; $message .= "Цялата заявка: " . $ sql; die($message); ) return $res; ) /**Прост генератор на сол * @param низ $sql */ функция сол() ( $salt = substr(md5(uniqid()), - 8); return $сол;)

    Да започнем да пишем регистрация. Като начало ще трябва да направим шаблон за регистрационна форма, така че потребителят да може да въведе данните си за обработка. След това ще трябва да напишем самия манипулатор на формуляри, който ще проверява коректността на въведените от потребителя данни. След като данните бъдат успешно потвърдени, ние ги записваме в нашата база данни и изпращаме имейл до потребителя, за да активира акаунта си.

    REG.PHP ФАЙЛ

    Регистрирахте се успешно! Моля, активирайте акаунта си!!"; //Активирайте акаунта if(isset($_GET["key"])) ( //Проверете ключа $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `active_hex` = "". escape_str ( $_GET["key"]) ."""; $res = mysqlQuery($sql); if(mysql_num_rows($res) == 0) $err = "Ключът за активиране е невалиден!"; //Проверка за грешки и показване на потребителя if(count($err) > 0) echo showErrorMessage($err); else ( //Вземете адреса на потребителя $row = mysql_fetch_assoc($res); $email = $row["login"]; //Активирайте потребителския акаунт $sql = "UPDATE `".BEZ_DBPREFIX ."reg` SET `status` = 1 WHERE `login` = "".$email ."""; $res = mysqlQuery($sql); / /Изпратете имейл за активиране $title = "(!LANG:Вашият акаунт на http://website е успешно активиран"; $message = "Поздравляю Вас, Ваш аккаунт на http://сайт успешно активирован"; sendMessageMail($email, BEZ_MAIL_AUTOR, $title, $message); /*Перенаправляем пользователя на нужную нам страницу*/ header("Location:". BEZ_HOST ."less/reg/?mode=reg&active=ok"); exit; } } /*Если нажата кнопка на регистрацию, начинаем проверку*/ if(isset($_POST["submit"])) { //Утюжим пришедшие данные if(empty($_POST["email"])) $err = "Поле Email не может быть пустым!"; else { if(!preg_match("/^!} [имейл защитен](+\.)+(2,6)$/i", $_POST["email"])) $err = "Имейлът е въведен неправилно"."\n"; ) if(empty($_POST[ "pass" ])) $err = "Полето за парола не може да бъде празно"; if(empty($_POST["pass2"])) $err = "Полето за потвърждение на паролата не може да бъде празно"; //Проверете за грешки и покажете на потребителя, ако (count($err) > 0) echo showErrorMessage($err); else ( /*Продължете да проверявате въведените данни Проверка за съвпадащи пароли*/ if($_POST["pass"] != $_POST["pass2" ] ) $err = "Паролите не съвпадат"; //Проверете за грешки и покажете на потребителя if(count($err) > 0) echo showErrorMessage($err); else ( /*Проверете дали имаме такъв потребител в базата данни* / $sql = "SELECT `login` FROM `".BEZ_DBPREFIX ."reg` WHERE `login` = "".escape_str($_POST["email"]) ."""; $res = mysqlQuery($ sql); if(mysql_num_rows($res) > 0) $err = "Извинете Вход: ". $_POST["имейл"] ."заето!"; //Проверете за грешки и покажете на потребителя if(count($err) > 0) echo showErrorMessage($err); else ( //Вземете HASH на солта $salt = salt(); // Задайте паролата $pass = md5(md5($_POST["pass"]).$salt); /*Ако всичко върви добре, запишете данни в базата данни*/ $sql = "INSERT INTO `". BEZ_DBPREFIX ."reg ` VALUES("", "" .escape_str($_POST["email"]) ."", "". $pass ."", "". $salt ."", "". md5($salt) . "", 0)"; $ res = mysqlQuery($sql); //Изпращане на имейл за активиране $url = BEZ_HOST ."less/reg/?mode=reg&key=". md5($salt); $title = "(! LANG:Регистрация на http:/ /уебсайт"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    REG_FORM.HTML ФАЙЛ

    Регистрация на PHP MySQL потребител с имейл за активиране

    електронна поща *:
    Парола *:
    Потвърждение на парола *:

    Полета с икона *изисква се

    Тъй като нашата потребителска регистрация е готова, време е да напишем оторизация. Ще създадем формуляр за авторизация на потребителя, след това ще напишем манипулатор на формуляр за авторизация и накрая ще направим скрипт show.phpкойто ще ни покаже дали сме оторизирани в системата или не.

    AUTH.PHP ФАЙЛ

    0) echo showErrorMessage($err); else ( /*Създаване на заявка за извличане на база данни за удостоверяване на потребителя*/ $sql = "SELECT * FROM `". BEZ_DBPREFIX ."reg` WHERE `login` = "". escape_str($_POST["email"]) ." " И `статус` = 1"; $res = mysqlQuery($sql); //Ако влизането съвпада, проверете паролата if(mysql_num_rows($res) > 0) ( //Вземете данни от таблица $row = mysql_fetch_assoc( $res ); if(md5(md5($_POST["pass"]).$row["salt"]) == $row["pass"]) ( $_SESSION["user"] = true; // Нулиране на параметрите header("Местоположение:". BEZ_HOST ."less/reg/?mode=auth"); изход; ) else echo showErrorMessage("Грешна парола!"); ) else echo showErrorMessage("Вход ". $_POST["имейл"] ."не е намерен!"); ) ) ?>

    За тези, които имат най-новата версия на PHP, публикувам този скрипт с помощта на PDOзащото разширение MySQLе остарял и е премахнат от новата версия на PHP. Изтеглете регистрация и оторизация php mysql pdo

    Архивът е актуализиран на 24 февруари 2015 г.

    Внимание:Ако използвате този скрипт на локален сървър като ДЕНВЕР,XAMPP, тогава не трябва да чакате писма в пощенската си кутия. Писмата са в кочанчето изпрати писмо. AT Денвърможете да ги намерите по пътя Z:\tmp\!sendmail\Можете да отворите тези файлове във всеки имейл клиент.

    Здравейте! Сега ще се опитаме да приложим най-простата регистрация на сайта с помощта на PHP + MySQL. За да направите това, Apache трябва да е инсталиран на вашия компютър. Как работи нашият скрипт е показано по-долу.

    1. Нека започнем със създаването на таблицата потребители в базата данни. Той ще съдържа потребителски данни (вход и парола). Да отидем на phpmyadmin (ако създадете база данни на вашия компютър http://localhost/phpmyadmin/). Създайте таблица потребители, ще има 3 полета.

    Аз го създавам в база данни mysql, вие можете да го създадете в друга база данни. След това задайте стойностите, както е показано на фигурата:

    2. Необходима е връзка с тази таблица.Нека създадем файл bd.php. Съдържанието му:

    $db = mysql_connect("вашият MySQL сървър","влезте в този сървър","парола за този сървър");
    mysql_select_db ("име на базата данни, към която да се свържете", $db);
    ?>

    В моя случай изглежда така:

    $db = mysql_connect("localhost","user","1234");
    mysql_select_db("mysql",$db);
    ?>

    спестяваме bd.php.
    Отлично! Имаме таблица в базата данни, връзка с нея. Сега можете да започнете да създавате страница, където потребителите ще оставят своите данни.

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



    Регистрация


    Регистрация
















    4. Създайте файл, който ще въведе данни в базата данни и ще запази потребителя. save_user.php(коментари вътре):



    {
    }
    //ако данните за вход и паролата са въведени, ние ги обработваме, така че таговете и скриптовете да не работят, никога не знаете какво могат да въведат хората


    // премахване на допълнителни интервали
    $login = подрязване($login);
    $парола = трим($парола);
    // свързване към базата данни
    // проверка за съществуването на потребител със същото логин
    $result = mysql_query("SELECT id FROM потребители WHERE login="$login"",$db);
    if (!empty($myrow["id"])) (
    exit("Съжаляваме, въведеното потребителско име вече е регистрирано. Моля, въведете друго потребителско име.");
    }
    // ако няма такъв, запазете данните
    $result2 = mysql_query ("INSERT INTO потребители (login,password) VALUES("$login","$password")");
    // Проверете дали има грешки
    ако ($result2=="TRUE")
    {
    echo "Регистрирахте се успешно! Вече можете да влезете в сайта. Главна страница";
    }
    иначе(
    echo "Грешка! Не сте влезли в системата.";
    }
    ?>

    5. Сега нашите потребители могат да се регистрират!След това трябва да направите "врата" за влизане в сайта за вече регистрирани потребители. index.php(коментари вътре):

    // цялата процедура работи на сесии. Именно в него се съхраняват данните на потребителя, докато той е на сайта. Много е важно да ги стартирате в самото начало на страницата!!!
    session_start();
    ?>


    Главна страница


    Главна страница











    Регистрирам



    // Проверете дали променливите за вход и потребителски идентификатор са празни
    if (празно($_SESSION["login"]) или празно($_SESSION["id"]))
    {
    // Ако е празно, не показваме връзката
    echo „Влезли сте като гост
    Тази връзка е достъпна само за регистрирани потребители";
    }
    друго
    {

    Във файл index.phpще покажем връзка, която ще бъде отворена само за регистрирани потребители. Това е целият смисъл на скрипта - да ограничи достъпа до всякакви данни.

    6. Има файл с проверка на въведените потребителско име и парола. testreg.php (коментари вътре):

    session_start();// цялата процедура работи на сесии. Именно в него се съхраняват данните на потребителя, докато той е на сайта. Много е важно да ги стартирате в самото начало на страницата!!!
    if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //поставяне на данните за вход, въведени от потребителя в променливата $login, ако е празна, тогава унищожаваме променливата
    if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
    //поставете въведената от потребителя парола в променливата $password, ако е празна, унищожете променливата
    if (empty($login) or empty($password)) //ако потребителят не е въвел потребителско име или парола, тогава издаваме грешка и спираме скрипта
    {
    exit("Не сте въвели цялата информация, върнете се и попълнете всички полета!");
    }
    //ако данните за вход и паролата са въведени, ние ги обработваме, така че таговете и скриптовете да не работят, никога не знаете какво могат да въведат хората
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $password = stripslashes($password);
    $парола = htmlspecialchars($парола);
    // премахване на допълнителни интервали
    $login = подрязване($login);
    $парола = трим($парола);
    // свързване към базата данни
    include("bd.php");// файлът bd.php трябва да е в същата папка като всички останали, ако не е, просто променете пътя

    $result = mysql_query("SELECT * FROM потребители WHERE login="$login"",$db); //извличане на всички данни за потребителя с въведеното логин от базата данни
    $myrow = mysql_fetch_array($result);
    ако (празно ($myrow["парола"]))
    {
    //ако потребителят с въведеното логин не съществува
    }
    иначе(
    //ако съществува, проверете паролите
    if ($myrow["password"]==$password) (
    //ако паролите съвпадат, тогава започваме сесията за потребителя! Можете да го поздравите, той влезе!
    $_SESSION["login"]=$myrow["login"];
    $_SESSION["id"]=$myrow["id"];//тези данни се използват много често, така че влезлият потребител ще ги "носи"
    echo "Вие успешно влязохте в сайта! Главна страница";
    }
    иначе(
    //ако паролите не съвпадат

    Изход ("Съжаляваме, въведените потребителско име или парола са неправилни.");
    }
    }
    ?>

    Добре, всичко свърши! Може би урокът е скучен, но много полезен. Тук е показана само идеята за регистрация, след което можете да я подобрите: добавете защита, дизайн, полета с данни, качете аватари, излезте от акаунта си (за това просто унищожете променливите от сесията с функцията ненастроен) и така нататък. Късмет!

    Проверих всичко, работи добре!