Jeśli chcesz udostępnić jedną z sekcji swojej witryny dla ograniczonego, ale nieokreślonego kręgu osób, najłatwiej to zrobić, rejestrując i autoryzując użytkowników. Istnieje wiele sposobów autoryzacji użytkowników. Możesz używać zarówno narzędzi serwera WWW, jak i narzędzi języka programowania. Porozmawiamy o przypadku, gdy używane są sesje PHP.

Może chciałbyś zobaczyć więcej nowoczesny sposób tworzenie takiej formy. Wciąż mam w planach jego kompletną, nowoczesną i aktualną prezentację, ale widać, że forma informacja zwrotna można zbudować za pomocą sztuczek obiektowych w PHP.

Na początek omówmy wszystkie kroki, które podejmiemy dalej. Czego naprawdę potrzebujemy? Potrzebujemy skryptu, który zarejestruje użytkownika, autoryzuje użytkownika, przekieruje go gdzieś po autoryzacji. Będziemy też musieli stworzyć stronę, która będzie chroniona przed dostępem nieautoryzowanych użytkowników. W celu rejestracji i autoryzacji będziemy musieli stworzyć formularze HTML. Będziemy przechowywać informacje o zarejestrowanych użytkownikach w bazie danych. Oznacza to, że nadal potrzebujemy skryptu połączenia DBMS. Całą pracę wykonamy funkcje, które sami napiszemy. Funkcje te zapiszemy w osobnym pliku.

Potrzebujemy więc następujących plików:

  • połączenie z DBMS;
  • funkcje niestandardowe;
  • upoważnienie;
  • rejestracja;
  • bezpieczna strona;
  • skrypt zamykający użytkownika;
  • skrypt sprawdzający status autoryzacji użytkownika;
  • arkusz stylów dla najprostszego projektu naszych stron.

Wszystko to będzie bez znaczenia, jeśli w bazie danych nie będzie odpowiedniej tabeli. Uruchom swoje narzędzie do zarządzania DBMS (PhpMyAdmin lub wiersz poleceń, w zależności od tego, co jest wygodniejsze) i wykonaj w nim następujące zapytanie:

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 ;

Nazwę nasze pliki skryptów w ten sposób (wszystkie będą w tym samym katalogu):

  • baza danych.php
  • funkcje.php
  • login.php
  • rejestracja.php;
  • index.php;
  • wyloguj.php;
  • checkAuth.php;
  • styl.css

Jestem pewien, że rozumiesz cel każdego z nich. Zacznijmy od skryptu połączenia DBMS. Już go widziałeś. Po prostu zapisz ten kod skryptu w pliku o nazwie database.php . Funkcje niestandardowe zadeklarujemy w pliku functions.php. Jak to wszystko będzie działać? Nieautoryzowany użytkownik próbuje uzyskać dostęp do chronionego dokumentu index.php, system sprawdza, czy użytkownik jest autoryzowany, jeśli użytkownik nie jest autoryzowany, zostaje przekierowany na stronę autoryzacji. Na stronie autoryzacji użytkownik powinien zobaczyć formularz autoryzacji. Zróbmy to.

Autoryzacja użytkownika

Zarejestruj się.

Teraz nasza forma musi otrzymać jakąś formę. Jednocześnie określimy zasady dla innych elementów. Patrząc w przyszłość, podam pełną zawartość arkusza stylów.

/* plik 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; margines-lewy:3px; )

Jeśli wszystko jest zrobione poprawnie, powinieneś mieć w swojej przeglądarce:

Oczywiście nie mamy jeszcze jednego zarejestrowanego użytkownika, a żeby się zalogować, musisz się zarejestrować. Zróbmy formularz rejestracyjny.

Rejestracja Użytkownika

" />

Być może zauważyłeś, że w kodzie HTML obecne są zmienne PHP. Są to zawartość atrybutów pól tekstowych formularza, zawartość kontenerów błędów. Ale nie zainicjalizowaliśmy tych zmiennych. Zróbmy to.

Rejestracja Użytkownika

" />
Nazwa użytkownika może zawierać tylko znaki łacińskie, cyfry, symbole „_”, „-”, „.”. Długość nazwy użytkownika musi wynosić co najmniej 4 znaki i nie więcej niż 16 znaków
W haśle możesz używać tylko znaków łacińskich, cyfr, symboli "_", "!", "(", ")". Hasło musi mieć co najmniej 6 znaków i nie dłuższe niż 16 znaków
Powtórz poprzednio wprowadzone hasło

Atrybut action znacznika formularza nie ma określonego parametru. W takim przypadku po przesłaniu danych formularza zostaną one przetworzone w tym samym skrypcie, z którego zostały wysłane. Więc musimy napisać kod, który przetwarza dane formularza. Ale najpierw omówmy algorytm ich przetwarzania.

Pola loginu i hasła muszą być niepuste. Następnie musisz sprawdzić login pod kątem zgodności z wymaganiami. Hasło musi również spełniać opisane wymagania, a ponownie określone hasło musi mu odpowiadać, a ponadto muszą być identyczne. Jeżeli którykolwiek z tych warunków nie jest spełniony, należy zakończyć przetwarzanie danych formularza, w tablicy komunikatów o błędach wpisać odpowiedni alert i wyświetlić go użytkownikowi. Dla wygody użytkownika zapiszemy wpisany przez niego login (o ile go podał), wpisując jego wartość do tablicy $fields.

Jeśli wszystko jest w porządku, w oknie przeglądarki, odwołując się do dokumentu registration.php, powinieneś zobaczyć coś takiego:

Załóżmy teraz, że użytkownik kliknął przycisk rejestracji, nie wypełnił pól formularza. Według naszego algorytmu login i hasło nie mogą być puste. Jeśli ten warunek nie jest spełniony, rejestracja nie jest możliwa. Pamiętamy, że przetwarzanie danych formularzy odbywa się w obecnym scenariuszu. Musimy więc zmienić jego kod, dodając odpowiednie sprawdzenia. Omówmy natychmiast następujące kontrole. W przypadku wprowadzenia loginu i hasła należy sprawdzić ich zgodność z określonymi wymaganiami. Aby sprawdzić login i hasło, utworzymy funkcje użytkownika w pliku functions.php.

/** * functions.php * Plik z niestandardowymi funkcjami */ // Połącz plik z parametrami połączenia z systemem DBMS require_once("database.php"); // Sprawdzenie funkcji nazwy użytkownika checkLogin($str) ( // Zainicjuj zmienną z możliwym komunikatem o błędzie $error = ""; // Jeśli nie ma ciągu logowania, zwróć komunikat o błędzie if(!$str) ( $error = "Nie wpisałeś nazwy użytkownika"; return $error; ) /** * Sprawdzanie nazwy użytkownika za pomocą wyrażeń regularnych * Login nie może być krótszy niż 4, nie dłuższy niż 16 znaków * Musi zawierać znaki łacińskie, cyfry, * mogą to być znaki "_", "-", "." */ $pattern = "/^[-_.a-z\d](4,16)$/i"; $result = preg_match($pattern, $ str) ; // Jeśli sprawdzenie się nie powiedzie, zwróć komunikat o błędzie if(!$result) ( $error = "Nieprawidłowe znaki w nazwie użytkownika lub nazwa użytkownika jest za krótka (długa)"; zwróć $error; ) // Jeśli wszystko jest w porządku, zwróć true return true; ) // Sprawdź funkcję hasła użytkownika checkPassword($str) ( // Zainicjuj zmienną z możliwym komunikatem o błędzie $error = ""; // Jeśli brakuje wprowadź ciąg znaków z loginem, zwróć komunikat o błędzie if(!$str) ( $error = "Nie podałeś hasła"; zwróć $błąd; ) /** * Sprawdź hasło użytkownika za pomocą wyrażeń regularnych * Hasło nie może być krótsze niż 6, nie dłuższe niż 16 znaków * Musi zawierać znaki łacińskie, cyfry, * może zawierać znaki "_", "!", " (", ")" */ $pattern = "/^[_!)(.a-z\d](6,16)$/i"; $result = preg_match($pattern, $str); // Jeśli sprawdź nie powiodło się, zwróć komunikat o błędzie if(!$result) ( $error = "Nieprawidłowe znaki w haśle użytkownika lub hasło za krótkie (długie)"; return $error; ) // Jeśli wszystko jest w porządku, zwróć true return true; )

Teraz musimy zmodyfikować plik registration.php, aby używał zadeklarowanych przez nas funkcji. Dodamy do skryptu warunek sprawdzający klikanie przycisku rejestracji. W tym stanie rozpoczyna się sprawdzanie loginu i hasła. Jeśli którakolwiek z kontroli się nie powiedzie, ponownie renderujemy formularz i wyświetlamy komunikat o błędzie. Jeśli nie ma błędów, rejestrujemy użytkownika, podczas gdy formularz rejestracyjny nie jest już wyświetlany, informujemy użytkownika o udanej rejestracji i za pomocą funkcji header() przekierowujemy go do formularza autoryzacji.

Pomyślnie zarejestrowałeś się w systemie. Zostaniesz teraz przekierowany na stronę logowania. Jeśli tak się nie stanie, przejdź do niego przez bezpośredni link.

"; header("Odśwież: 5; URL = login.php"); ) // W przeciwnym razie poinformuj użytkownika o błędzie else ( $errors["full_error"] = $reg; ) ) ) ?> Rejestracja Użytkownika
" />
Nazwa użytkownika może zawierać tylko znaki łacińskie, cyfry, symbole „_”, „-”, „.”. Długość nazwy użytkownika musi wynosić co najmniej 4 znaki i nie więcej niż 16 znaków
W haśle możesz używać tylko znaków łacińskich, cyfr, symboli "_", "!", "(", ")". Hasło musi mieć co najmniej 6 znaków i nie dłuższe niż 16 znaków
Powtórz poprzednio wprowadzone hasło

Powinieneś zauważyć jeszcze jedną nową funkcję w skrypcie - registration() . Jeszcze tego nie ogłosiliśmy. Zróbmy to.

// Rejestracja funkcji rejestracji użytkownika ($login, $password) ( // Zainicjuj zmienną z możliwym komunikatem o błędzie $error = ""; // Jeśli nie ma ciągu logowania, zwróć komunikat o błędzie if(!$login) ( $ error = "Nie określono logowania"; return $error; ) elseif(!$password) ( $error = "Nie określono hasła"; return $error; ) // Sprawdź, czy użytkownik jest już zarejestrowany // Połącz się z DBMS connect() ; // Napisz zapytanie $sql = "SELECT `id` FROM `users` WHERE `login`="" . $login . """; // Wykonaj zapytanie do bazy danych $query = mysql_query($ sql) or die( ""); // Sprawdź liczbę użytkowników z tym loginem, jeśli jest przynajmniej jeden, // zwróć komunikat o błędzie if(mysql_num_rows($query) > 0) ( $error = "The użytkownik o podanym loginie jest już zarejestrowany"; return $ error; ) // Jeśli nie ma takiego użytkownika, zarejestruj go // Napisz zapytanie $sql = "INSERT INTO `users` (`id`,`login`, `hasło`) WARTOŚCI (NULL, "" . $login . " ","" . $hasło. "")"; // Wykonaj zapytanie do bazy danych $query = mysql_query($sql) or die("

Nie można dodać użytkownika: " . mysql_error() . ". Wystąpił błąd w wierszu „. __LINE__.”

"); // Nie zapomnij odłączyć się od DBMS mysql_close(); // Zwróć true, oznaczający pomyślną rejestrację użytkownika, return true; )

Jeśli wszystko jest w porządku, Twój użytkownik zostanie zarejestrowany. Możesz przetestować formularz. Spróbuj zarejestrować użytkowników z tymi samymi loginami. Po udanej rejestracji użytkownik zostanie przekierowany do formularza autoryzacji. Wcześniej po prostu tworzyliśmy znaczniki, aby wyświetlić ten formularz. Ponieważ w jego atrybucie action nie jest określony żaden parametr, dane przesłane przez formularz będą przetwarzane w tym samym skrypcie. Musimy więc napisać kod do przetworzenia i dodać go do dokumentu login.php.

Autoryzacja użytkownika

;">

Jeśli nie jesteś zarejestrowany w systemie, zarejestruj się.

Być może zauważyłeś, że mamy teraz inną nieznaną funkcję w skrypcie autoryzacyjnym — autoryzację() . Funkcja ta powinna autoryzować użytkownika po uprzednim sprawdzeniu, czy w bazie danych jest zarejestrowany użytkownik o tym samym loginie i haśle. Jeśli taki użytkownik nie zostanie znaleziony, autoryzacja zostanie przerwana, a na ekranie pojawi się komunikat o niepowodzeniu. Po pomyślnej weryfikacji funkcja autoryzacji() uruchomi sesję i zapisze w niej wartości loginu i hasła użytkownika, poinformuje skrypt o pomyślnej autoryzacji, a skrypt przekieruje użytkownika na bezpieczną stronę zasobu.

/** * Funkcja autoryzacji użytkownika. * Autoryzacja użytkowników zostanie przeprowadzona * przy użyciu sesji PHP. */ function authentication($login, $password) ( // Zainicjuj zmienną z możliwym komunikatem o błędzie $error = ""; // Jeśli nie ma ciągu logowania, zwróć komunikat o błędzie if(!$login) ( $error = "Nie określono loginu"; return $error; ) elseif(!$password) ( $error = "Hasło nie określono"; return $error; ) // Sprawdź, czy użytkownik jest już zarejestrowany // Połącz się z DBMS connect( // Musimy sprawdzić, czy wśród zarejestrowanych jest taki użytkownik // Skomponuj łańcuch zapytania $sql = "SELECT `id` FROM `users` WHERE `login`=".$login."" AND `password`="".$password ."""; // Wykonaj zapytanie $query = mysql_query($sql) or die("

Nie można wykonać zapytania: " . mysql_error() . ". Wystąpił błąd w wierszu „. __LINE__.”

// Jeśli nie ma użytkownika z takimi danymi, zwróć komunikat o błędzie if(mysql_num_rows($query) == 0) ( $error = "Użytkownik z określonymi danymi nie jest zarejestrowany"; return $error; ) // Jeśli użytkownik istnieje , uruchom sesję session_start(); _SESSION["hasło"] = $hasło; // Nie zapomnij zamknąć połączenia z bazą danych mysql_close(); // Zwróć true, aby zgłosić pomyślną autoryzację użytkownika, return true; )

Gdy użytkownik wchodzi na bezpieczną stronę, należy sprawdzić poprawność jego danych autoryzacyjnych. Aby to zrobić, potrzebujemy jeszcze jednej funkcji zdefiniowanej przez użytkownika. Nazwijmy to checkAuth() . Jego zadaniem będzie weryfikacja danych autoryzacyjnych użytkownika z danymi przechowywanymi w naszej bazie danych. Jeśli dane się nie zgadzają, użytkownik zostanie przekierowany na stronę autoryzacji.

Function checkAuth($login, $password) ( // Jeśli nie ma loginu lub hasła, zwróć false if(!$login || !$password) return false; // Sprawdź, czy taki użytkownik jest zarejestrowany // Połącz się z DBMS connect(); // Utwórz ciąg zapytania $sql = "SELECT `id` FROM `users` WHERE `login`="".$login."" AND `password`="".$password."""; // Wykonaj zapytanie $ query = mysql_query($sql) or die("

Nie można wykonać zapytania: " . mysql_error() . ". Wystąpił błąd w wierszu „. __LINE__.”

"); // Jeśli nie ma użytkownika z takimi danymi, zwróć false; if(mysql_num_rows($query) == 0) ( return false; ) // Nie zapomnij zamknąć połączenia z bazą danych mysql_close(); // W przeciwnym razie, zwróć prawdę, zwróć prawdę; )

Teraz, gdy użytkownik wylądował na bezpiecznej stronie, musimy wywołać funkcję walidacji danych autoryzacyjnych. Skrypt call i check umieścimy w osobnym pliku checkAuth.php i połączymy go z tymi stronami, które będą zamknięte dla publicznego dostępu.

/** * Skrypt do sprawdzania autoryzacji użytkowników */ // Rozpocznij sesję, z której wydobędziemy login i hasło // autoryzowanych użytkowników session_start(); // Dołącz plik z funkcjami niestandardowymi require_once("functions.php"); /** * Aby określić, czy użytkownik jest zalogowany, musimy * sprawdzić, czy w bazie danych istnieją rekordy zawierające jego nazwę użytkownika * i hasło. W tym celu wykorzystamy funkcję niestandardową *, aby sprawdzić poprawność danych upoważnionego użytkownika. * Jeśli ta funkcja zwraca wartość false, oznacza to brak autoryzacji. * Jeśli nie ma autoryzacji, po prostu przekierowujemy * użytkownika na stronę autoryzacji. */ // Jeśli sesja zawiera dane logowania i hasła, // sprawdź je if(isset($_SESSION["login"]) && $_SESSION["login"] && isset($_SESSION["password" ]) && $_SESSION["hasło"]) ( // Jeśli weryfikacja istniejących danych nie powiedzie się if(!checkAuth($_SESSION["login"], $_SESSION["hasło"])) ( // Przekieruj użytkownika do nagłówka strony logowania ("location: login.php"); // Przerwanie wykonywania wyjścia skryptu; ) ) // Jeśli nie ma danych o loginie lub haśle użytkownika, // uważamy, że nie ma autoryzacji, przekieruj użytkownik // do strony autoryzacji else ( header("location: login.php"); // Zatrzymaj zakończenie wykonywania skryptu; )

Teraz utwórzmy kod dla naszej bezpiecznej strony. To będzie całkiem proste.

Autoryzacja i rejestracja użytkowników

Udana autoryzacja.

Masz dostęp do bezpiecznej strony. Możesz się wylogować.

Jak widać, w chronionym dokumencie umieszczamy tylko jeden plik - checkAuth.php. Wszystkie inne pliki są uwzględnione w innych scenariuszach. Dlatego nasz kod nie wygląda na obszerny. Zorganizowaliśmy rejestrację i autoryzację użytkowników. Teraz musisz zezwolić użytkownikom na wylogowanie. W tym celu stworzymy skrypt w pliku logout.php.

/** * Skrypt wylogowania użytkownika. Ponieważ użytkownicy są * autoryzowani poprzez sesje, ich nazwa użytkownika i hasło są przechowywane * w superglobalnej tablicy $_SESSION. Aby wylogować się * z systemu wystarczy zniszczyć * wartości tablic $_SESSION["login"] i $_SESSION["password"], * po czym przekierujemy użytkownika do strony logowania */ // Bądź koniecznie rozpocznij sesję session_start(); unset($_SESSION["logowanie"]); unset($_SESSION["hasło"]); header("lokalizacja: login.php");

Skrypt do rejestracji, autoryzacji i weryfikacji użytkowników jest gotowy. Możesz go używać dla siebie, uzupełniać, modyfikować do swoich potrzeb. Jeśli masz pytania, możesz je zadać w komentarzach. Wszystkie omawiane tutaj pliki można pobrać w jednym archiwum.

PS Zdaję sobie sprawę, że lepiej pisać kod obiektowy, wiem, że nie warto przekazywać i przechowywać hasła w postaci zwykłego tekstu, że informacje wprowadzone do bazy danych muszą być najpierw sprawdzone. Wiem. Nie będę o tym tutaj mówić.

W ramach usługi Personal Web Server witryny hostowane na koncie mogą być uruchamiane nie tylko na głównym serwerze WWW, ale również na własnej instancji serwera WWW Apache, którego procesy są zawsze gotowe do przetwarzania żądań do serwisu.

Oprócz optymalizacji przetwarzania żądań, osobisty serwer WWW umożliwia korzystanie z oprogramowania, które nie jest dostępne na zwykłym serwerze WWW: akceleratory PHP, kompleksowe rozwiązanie poprawiające wydajność projektów zarządzanych przez 1C-Bitrix CMS oraz skrypt PHP narzędzie do debugowania.

Usługa jest dostępna do użytku we wszystkich aktualnych planach taryfowych, można ją podłączyć w sekcji „Serwer WWW” w Panelu sterowania hostingu.

Zasada działania


Strona techniczna hostingu ma dwupoziomową konfigurację serwera WWW. Ogólny serwer WWW Apache, po zaakceptowaniu żądania od Nginx, jest zmuszony do utworzenia nowego procesu potomnego i zakończenia go, gdy żądanie zostanie przetworzone.

Osobisty serwer WWW znacznie upraszcza interakcję konta z głównym procesem Apache: pewna liczba procesów osobistego serwera WWW zawsze działa pod nazwą użytkownika konta hostingowego, które mają tylko dwa stany: „zajęty” lub „wolny”.

Procesy osobistego serwera WWW są zaangażowane w przetwarzanie żądań do witryny w ilości określonej przez wybrany plan taryfowy. Możesz zobaczyć, w jaki sposób proces osobistego serwera WWW odbiera i wykonuje żądanie, a następnie jest zwalniany, samodzielnie za pomocą głównego narzędzia w konsoli podczas łączenia się z kontem hostingowym przez SSH.

Możliwości

  • Uruchamianie serwera WWW Apache z dodatkowymi modułami, które nie są dostępne na zwykłych współdzielonych kontach hostingowych.
  • Ponowne uruchamianie Personal Web Server z Panelu Sterowania.
  • Korzystanie z akceleratorów PHP znacznie przyspieszających pracę różnych CMS-ów: Zend OPCache, APC , xCache oraz eAccelerator .
  • Zarządzanie rozszerzeniami PHP: Zend Optimizer , ionCube Loader , xDebug .
  • Optymalizacja projektów pod kontrolą CMS 1C-Bitrix poprzez ustawienie środowiska PHP spełniającego wymagania CMS.
  • Lepsza wydajność niż zwykły serwer WWW dzięki ciągłemu działaniu procesów żądań.

W przypadku prowadzenia poważnych projektów o średnim i dużym natężeniu ruchu lub projektów, które wymagają niestandardowych ustawień środowiska i zaawansowanych możliwości administrowania witryną, zalecamy korzystanie z usługi „Osobisty serwer WWW”.

Kontrola wersji serwera WWW

PHP

PHP (preprocesor hipertekstu)- najbardziej znany i rozpowszechniony język tworzenia aplikacji internetowych. Wersja PHP jest ustawiana poprzez zarządzanie osobistym serwerem WWW (dostępne od 5.2 do 7.1 włącznie). Zalecaną wersją PHP, która spełnia wymagania większości CMS i rozszerzeń jest PHP 5.6. Lista aktualnych wersji jest aktualizowana w odpowiednim czasie.

uWSGI (Python)

WSGI (interfejs bramy serwera WWW) jest popularnym standardem komunikacji między programem Pythona działającym po stronie serwera a samym serwerem WWW Apache. Wymagane dla projektów napisanych w Pythonie.

Node.js

Node.js- platforma programowa do wykonywania kodu JavaScript. Node.js pozwala JavaScriptowi na interakcję z urządzeniami poprzez jego API, łączenie zewnętrznych bibliotek w różnych językach i dostarczanie do nich wywołań z kodu JavaScript.

Korzystanie z akceleratorów PHP

Akceleratory PHP to rozszerzenia, które przechowują w pamięci skompilowany kod skryptu PHP w celu szybkiego wykonania przy następnym wywołaniu. Pozwalają one znacznie przyspieszyć wykonywanie skryptów PHP i zmniejszyć wymagane do tego zasoby serwera WWW (według niektórych szacunków - o 5-20 razy).

W normalny sposób PHP działa, każdy skrypt musi zostać skompilowany do kodu maszynowego przed wykonaniem i dopiero wtedy uruchomiony. Kompilacja następuje przy każdym dostępie do skryptu, to znaczy za każdym razem, gdy strona jest wyświetlana, kompilacja skryptu rozpoczyna się od nowa. Kompilacja skryptu wymaga czasu i zasobów procesora. Akceleratory PHP przechowują skompilowaną wersję skryptu w pamięci RAM. Dlatego przy kolejnych wywołaniach skryptu kompilacja nie jest wymagana, a PHP natychmiast rozpoczyna wykonywanie kodu maszynowego. Buforowanie oszczędza zasoby procesora i skraca czas renderowania strony.

Oprócz głównej funkcji - buforowania skryptów - akceleratory zapewniają również skryptom możliwość przechowywania dowolnych zmiennych w pamięci RAM w celu późniejszego szybkiego dostępu. Mechanizmy buforowania stron w wielu systemach zarządzania treścią (CMS) opierają się na tej funkcji, co znacznie przyspiesza ich pracę.

Podczas korzystania z osobistego serwera WWW dostępne są cztery akceleratory, które zapewniają buforowanie skryptów PHP.

Zend OPCache

Zend OPCache- przyspiesza pracę stron w języku PHP dzięki wykorzystaniu techniki buforowania skompilowanych skryptów (opcode) w pamięci RAM i zastosowaniu dodatkowych optymalizacji. Testowanie aplikacji tego akceleratora wykazało najbardziej optymalne wyniki dla większości CMS w połączeniu z PHP 5.6.

APC

APC (Alternatywna pamięć podręczna PHP)- oprogramowanie open source do buforowania wyników skryptów PHP. Zaleca się korzystanie z cache APC w celu poprawy wydajności witryn tworzonych na popularnych CMS-ach takich jak Joomla, WordPress, Drupal, UMI.CMS. PHP 5.6 i 7.0 obsługują moduły akceleratorów APCu i APCu-bc.

eAkcelerator

eAkcelerator- pełni funkcje akceleratora, optymalizatora i rozpakowywania oraz ma wbudowane funkcje dynamicznego buforowania treści. Zgodnie z wynikami testów przeprowadzonych z przedstawicielami producentów CMS, eAccelerator jest zalecany do współpracy z CMS „1C-Bitrix: Site Management” oraz popularnym HostCMS.

xCache

xCache- skuteczne w projektach o dużym obciążeniu. Akcelerator xCache jest dostępny tylko w przypadku korzystania z systemu CMS, którego zalecają go producenci.

Włączenie akceleratora oznacza, że ​​konto zużywa dodatkowy obszar pamięci przeznaczony do buforowania danych. Ilość pamięci dostępnej do wykorzystania jest określona przez plan taryfowy i jest wskazana w odpowiedniej sekcji witryny.

Moduły i rozszerzenia PHP

ZendOptimizer

Optymalizator Zend- aplikacja firmy Zend Technologies Ltd. Rozszerzenie Zend Optimizer to moduł po stronie serwera, który służy do uruchamiania skryptów zakodowanych za pomocą Zend Encoder i Zend SafeGuard Suite, znacznie zwiększając ich szybkość. Dostępne tylko dla PHP 5.2.

Ładowarka ionCube

Ładowarka ionCube- oprogramowanie wymagane do dekodowania kodu źródłowego zakodowanego w technologii ionCube Encoder. W sumie zestaw narzędzi ionCube (Encoder i Loader) umożliwia kodowanie, zaciemnianie i licencjonowanie kodu źródłowego PHP.

xDebug

xdebug- Oprogramowanie typu open source potrzebne doświadczonym programistom do debugowania skryptów witryny. Włączenie zasobożernego narzędzia xDebug wprowadza możliwość logowania, w którym będą rejestrowane wszystkie działania, od wejścia na stronę z przeglądarki po otrzymanie gotowej strony: wykonywanie wewnętrznych skryptów, generowanie zapytań SQL, dostęp do strony dla osób trzecich zasoby partii itp.

Optymalizacja dla „1C-Bitrix”

Popularny system zarządzania treścią „1C-Bitrix” ma szereg wymagań systemowych dla witryny hostingowej, w tym ustawienie wielobajtowych ciągów, które we współczesnych wersjach PHP należy zmienić tylko za pomocą pliku php.ini. Zarówno doświadczeni programiści, jak i początkujący użytkownicy będą mogli skonfigurować mechanizm przeciążania funkcji mbstring.func_overload oraz obsługiwane kodowanie znaków mbstring.internal_encoding, wybierając wymaganą wersję z listy 1C-Bitrix Optimization.

W wyniku testowania wydajności strony pod kontrolą 1C-Bitrix, najlepsze wyniki osiągnięto przy użyciu zalecanego buforowania przy użyciu akceleratora ZendOPCache w połączeniu z PHP 5.6.

Aby ustawienia zaczęły obowiązywać, musisz zastosować żądane ustawienie i ponownie uruchomić Personal Web Server.

Trackbacki (0)

Zaktualizowano: 2018-03-12

Wysłany dnia: 2016-12-21

Z biegiem czasu PHP dodawał funkcje, które promują tworzenie bezpiecznych aplikacji, a także przestarzałe lub usunięte funkcje, które ułatwiały pisanie niezabezpieczonego kodu.

Przeczytaj ten samouczek, aby dowiedzieć się, jak stworzyć nowoczesny system logowania i rejestracji, który wykorzystuje funkcje PHP skoncentrowane na bezpieczeństwie i używa jQuery do wysyłania żądań AJAX i Bootstrap, aby zapewnić szybki i przyjemny interfejs użytkownika, który może działać niezależnie od tego, czy używasz innych frameworków lub nie.



Jeśli masz pytania lub komentarze, możesz zamieścić wiadomość jako komentarz do tego artykułu lub w jego .

Dziennik zmian

27.03.2017: Dodano więcej informacji o pobieraniu i instalowaniu za pomocą narzędzia kompozytora.

01.01.2017: Zaktualizowano artykuł, aby odzwierciedlić, że nadal są to bezpieczne praktyki w 2017 r.




Aby dodać komentarz, musisz być zarejestrowanym użytkownikiem lub się zalogować

Zaloguj się natychmiast za pomocą swojego konta na:

Dobry dzień przyjaciele! Przyjrzyjmy się rejestracji użytkownika w PHP. Najpierw określmy warunki rejestracji naszego użytkownika:

  • Hasło jest szyfrowane za pomocą algorytmu MD5
  • Hasło będzie „sól”
  • Zaloguj się, aby sprawdzić zajętość
  • Aktywacja użytkownika listownie.
  • Rejestracja i przechowywanie danych w DBMS MySQL

Aby napisać ten skrypt, musimy zrozumieć, czym jest rejestracja użytkownika. Rejestracja użytkownika to pozyskiwanie prawdziwych danych użytkownika, przetwarzanie i przechowywanie danych.

W prostych słowach rejestracja to tylko zapis i przechowywanie pewnych danych, za pomocą których możemy autoryzować użytkownika w naszym przypadku - jest to Login i Hasło.

Autoryzacja - nadanie określonej osobie lub grupie osób uprawnień do wykonywania określonych czynności, a także proces weryfikacji tych uprawnień przy próbie wykonania tych czynności. Mówiąc najprościej, za pomocą autoryzacji możemy ograniczyć dostęp do określonej treści na naszej stronie.

Przyjrzyjmy się strukturze katalogów skryptów, aby zaimplementować nasze logowanie z autoryzacją. Musimy podzielić skrypty na logiczne części. Moduły rejestracji i autoryzacji umieściliśmy w osobnym katalogu. Umieścimy również połączenie z bazą danych w osobnych katalogach. MySQL, plik z funkcjami niestandardowymi, plik stylu css i nasz szablon HTML. Ta struktura umożliwia szybkie poruszanie się po skryptach. Wyobraź sobie, że masz dużą witrynę z mnóstwem modułów i tak dalej. a jeśli nie ma porządku, to bardzo trudno będzie coś znaleźć w takim bałaganie.

Ponieważ będziemy przechowywać wszystkie dane w DBMS MySQL, stwórzmy małą tabelkę, w której będziemy przechowywać dane rejestracyjne.

Najpierw musisz utworzyć tabelę w bazie danych. Zadzwońmy do stołu bez_reg gdzie bez jest prefiksem tabeli i reg Nazwa tabeli.

Struktura tabeli: bez_reg

-- -- Struktura tabeli `bez_reg` -- CREATE TABLE IF NOT EXISTS `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) NIE NULL, PRIMARY KEY (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Teraz stwórzmy główne skrypty do dalszej pracy.

INDEKS.PLIK PHP

KONFIG.PLIK PHP

"); ?>

Plik 404.HTML

błąd 404

błąd 404

Na stronie wystąpił błąd 404

Zwrócić

Plik BD.PHP

INDEX.PLIK HTML

Rejestracja użytkownika PHP MySQL z e-mailem aktywacyjnym

PLIK FUNK.PHP

"."\n"; if(is_array($dane)) ( foreach($dane jako $val) $err .= "

  • „.$wal.”
  • "."\n"; ) else $err .= "
  • „.$dane”.
  • "."\n"; $err .= ""."\n"; return $err; ) /**Proste opakowanie zapytania MySQL * @param string $sql */ function mysqlQuery($sql) ( $res = mysql_query($sql); /* Sprawdź wynik rzeczywiste zapytanie wysłane do MySQL, a także błąd.*/ if(!$res) ( $message = "Złe zapytanie: " . mysql_error() . "\n"; $message .= "Całe zapytanie: " . $ sql; die($message); ) return $res; ) /**Prosty generator soli * @param string $sql */ function salt() ( $salt = substr(md5(uniqid()), - 8); return $sól; )

    Zacznijmy pisać rejestrację. Na początek będziemy musieli wykonać wzór formularza rejestracyjnego, aby użytkownik mógł wprowadzić swoje dane do przetwarzania. Następnie będziemy musieli napisać samą obsługę formularzy, która sprawdzi poprawność wprowadzonych danych użytkownika. Po pomyślnej weryfikacji danych zapisujemy je do naszej bazy danych i wysyłamy e-mail do użytkownika w celu aktywacji jego konta.

    REG.PHP PLIK

    Zarejestrowałeś się pomyślnie! Proszę aktywować konto!!"; //Aktywuj konto if(isset($_GET["key"])) ( //Sprawdź klucz $sql = "SELECT * FROM `". BEZ_DBPREFIX .reg` WHERE `active_hex` = "". escape_str ( $_GET["klucz"]) ."""; $res = mysqlQuery($sql); if(mysql_num_rows($res) == 0) $err = "Klucz aktywacji jest nieprawidłowy!"; //Sprawdź błędy i wyświetl użytkownikowi if(count($err) > 0) echo showErrorMessage($err); else ( //Pobierz adres użytkownika $row = mysql_fetch_assoc($res); $email = $row["login"]; //Aktywuj konto użytkownika $sql = "UPDATE `".BEZ_DBPREFIX .reg` SET `status` = 1 WHERE `login` = "".$email ."""; $res = mysqlQuery($sql); / /Wyślij e-mail aktywacyjny $title = "(!LANG:Twoje konto na http://website zostało pomyślnie aktywowane"; $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("/^!} [e-mail chroniony](+\.)+(2,6)$/i", $_POST["email"])) $err = "E-mail wprowadzony niepoprawnie"."\n"; ) if(empty($_POST[ "pass" ])) $err = "Pole hasła nie może być puste"; if(empty($_POST["pass2"])) $err = "Pole potwierdzenia hasła nie może być puste"; //Sprawdź błędy i wyświetl użytkownikowi, jeśli (count($err) > 0) echo showErrorMessage($err); else ( /*Kontynuuj sprawdzanie wprowadzonych danych Sprawdź pasujące hasła*/ if($_POST["pass"] != $_POST["pass2" ] ) $err = "Hasła się nie zgadzają"; //Sprawdź błędy i wyświetl użytkownikowi if(count($err) > 0) echo showErrorMessage($err); else ( /*Sprawdź, czy mamy takiego użytkownika w baza danych* / $sql = "SELECT `login` FROM `".BEZ_DBPREFIX .reg` WHERE `login` = "".escape_str($_POST["email"]) ."""; $res = mysqlQuery($ sql); if(mysql_num_rows($res) > 0) $err = "Przepraszam, zaloguj się: ". $_POST["e-mail"] ." zajęty!"; //Sprawdź błędy i wyświetl je użytkownikowi if(count($err) > 0) echo showErrorMessage($err); else ( //Pobierz HASH soli $salt = salt(); // Sól hasło $pass = md5(md5($_POST["pass"]).$salt); /*Jeśli wszystko pójdzie dobrze, zapisz dane do bazy danych*/ $sql = "INSERT INTO `". BEZ_DBPREFIX .reg ` VALUES("", "" .escape_str($_POST["email"]) ."", "". $pass ."", "". $salt ."", "". md5($salt) . "", 0)"; $ res = mysqlQuery($sql); //Wyślij e-mail aktywacyjny $url = BEZ_HOST .less/reg/?mode=reg&key=". md5($salt); $title = "(! LANG:Rejestracja na http:///strona internetowa"; $message = "Для активации Вашего акаунта пройдите по ссылке ". $url .""; sendMessageMail($_POST["email"], BEZ_MAIL_AUTOR, $title, $message); //Сбрасываем параметры header("Location:". BEZ_HOST ."less/reg/?mode=reg&status=ok"); exit; } } } } ?>!}

    REG_FORM.PLIK HTML

    Rejestracja użytkownika PHP MySQL z e-mailem aktywacyjnym

    E-mail *:
    Hasło *:
    Potwierdzenie hasła *:

    Pola z ikoną * wymagany

    Ponieważ nasza rejestracja użytkownika jest gotowa, czas na napisanie autoryzacji. Stworzymy formularz do autoryzacji użytkownika, następnie napiszemy handler formularzy autoryzacyjnych i na koniec zrobimy skrypt show.php który pokaże nam, czy jesteśmy upoważnieni w systemie, czy nie.

    UWIERZYTEL.PLIK PHP

    0) echo showErrorMessage($err); else ( /*Utwórz zapytanie pobierania bazy danych, aby uwierzytelnić użytkownika*/ $sql = "SELECT * FROM `". BEZ_DBPREFIX .reg` WHERE `login` = "".escape_str($_POST["email"]) ." " AND `status` = 1"; $res = mysqlQuery($sql); //Jeśli login pasuje, sprawdź hasło if(mysql_num_rows($res) > 0) ( //Pobierz dane z tabeli $row = mysql_fetch_assoc( $res if(md5(md5($_POST["pass"]).$row["salt"]) == $row["pass"]) ( $_SESSION["user"] = true; // Zresetuj parametry header("Lokalizacja:". BEZ_HOST ."less/reg/?mode=auth"); exit; ) else echo showErrorMessage("Błędne hasło!"); ) else echo showErrorMessage("Zaloguj się ". $_POST["e-mail"] ." nie znaleziono!");) ) ?>

    Dla tych, którzy mają najnowszą wersję PHP, publikuję ten skrypt za pomocą ChNP dlatego rozbudowa MySQL jest przestarzały i został usunięty z nowej wersji PHP. Pobierz rejestrację i autoryzację php mysql pdo

    Archiwum zostało zaktualizowane 24 lutego 2015 r.

    Uwaga: Jeśli używasz tego skryptu na lokalnym serwerze, takim jak DENWER,XAMPP, to nie powinieneś czekać na listy do swojej skrzynki pocztowej. Listy są w stub Wyślij maila. W Denver możesz je znaleźć po drodze Z:\tmp\!wyślij pocztę\ Możesz otworzyć te pliki w dowolnym kliencie poczty e-mail.

    Witam! Teraz postaramy się zaimplementować najprostszą rejestrację w serwisie za pomocą PHP + MySQL. Aby to zrobić, na komputerze musi być zainstalowany Apache. Jak działa nasz skrypt, pokazano poniżej.

    1. Zacznijmy od stworzenia tabeli użytkowników w bazie danych. Będzie zawierać dane użytkownika (login i hasło). Przejdźmy do phpmyadmina (jeśli tworzysz bazę danych na swoim komputerze) http://localhost/phpmyadmin/). Utwórz tabelę użytkownicy, będzie miał 3 pola.

    Tworzę go w bazie mysql, możesz utworzyć w innej bazie. Następnie ustaw wartości, jak na rysunku:

    2. Wymagane jest połączenie z tą tabelą. Stwórzmy plik bd.php. Jego zawartość:

    $db = mysql_connect("Twój serwer MySQL","logowanie do tego serwera","hasło do tego serwera");
    mysql_select_db ("nazwa bazy danych do połączenia", $db);
    ?>

    W moim przypadku wygląda to tak:

    $db = mysql_connect("host lokalny","użytkownik","1234");
    mysql_select_db("mysql",$db);
    ?>

    Ratujemy bd.php.
    Doskonały! W bazie danych mamy tabelę, połączenie z nią. Teraz możesz zacząć tworzyć stronę, na której użytkownicy będą zostawiać swoje dane.

    3. Utwórz plik reg.php z zawartością (wszystkie komentarze w środku):



    Rejestracja


    Rejestracja
















    4. Utwórz plik, który wprowadzi dane do bazy i zapisze użytkownika. save_user.php(komentarze w środku):



    {
    }
    //jeżeli login i hasło są wpisane, to przetwarzamy je tak, aby nie działały tagi i skrypty, nigdy nie wiadomo, co ludzie mogą wpisać


    // usuń dodatkowe spacje
    $logowanie = przycinanie($logowanie);
    $hasło = przyciąć($hasło);
    // połącz się z bazą danych
    // sprawdź, czy istnieje użytkownik o tym samym loginie
    $result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
    if (!empty($myrow["id"])) (
    exit("Przepraszamy, wprowadzona nazwa użytkownika jest już zarejestrowana. Wprowadź inną nazwę użytkownika.");
    }
    // jeśli nie ma, to zapisz dane
    $result2 = mysql_query ("WSTAW użytkowników (login,hasło) VALUES("$login","$password")");
    // Sprawdź, czy są błędy
    jeśli ($result2=="PRAWDA")
    {
    echo "Zarejestrowałeś się pomyślnie! Teraz możesz wejść na stronę. Strona główna";
    }
    w przeciwnym razie(
    echo "Błąd! Nie jesteś zalogowany.";
    }
    ?>

    5. Teraz nasi użytkownicy mogą się zarejestrować! Następnie musisz zrobić „drzwi”, aby wejść na stronę dla już zarejestrowanych użytkowników. index.php(komentarze w środku):

    // cała procedura działa na sesjach. To w nim przechowywane są dane użytkownika podczas jego pobytu w serwisie. Bardzo ważne jest, aby uruchomić je na samym początku strony!!!
    start_sesji();
    ?>


    Strona główna


    Strona główna











    Zarejestrować



    // Sprawdź, czy zmienne login i identyfikator użytkownika są puste
    if (pusty($_SESSION["login"]) lub pusty($_SESSION["id"]))
    {
    // Jeśli jest pusty, nie wyświetlamy linku
    echo "Jesteś zalogowany jako gość
    Ten link jest dostępny tylko dla zarejestrowanych użytkowników”;
    }
    w przeciwnym razie
    {

    W pliku index.php wyświetlimy link, który będzie otwarty tylko dla zarejestrowanych użytkowników. O to właśnie chodzi w skrypcie - ograniczenie dostępu do jakichkolwiek danych.

    6. Istnieje plik z weryfikacją wprowadzonego loginu i hasła. testreg.php (komentarze w środku):

    session_start();// cała procedura działa na sesjach. To w nim przechowywane są dane użytkownika podczas jego pobytu w serwisie. Bardzo ważne jest, aby uruchomić je na samym początku strony!!!
    if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //podaj login wprowadzony przez użytkownika do zmiennej $login, jeśli jest pusta, to niszczymy zmienną
    if (isset($_POST["password"])) ( $password=$_POST["password"]; if ($password =="") ( unset($password);) )
    //wstaw hasło wprowadzone przez użytkownika do zmiennej $password, jeśli jest puste, zniszcz zmienną
    if (empty($login) or empty($password)) //jeśli użytkownik nie podał loginu lub hasła, to wystawiamy błąd i zatrzymujemy skrypt
    {
    exit("Nie wprowadziłeś wszystkich informacji, wróć i wypełnij wszystkie pola!");
    }
    //jeżeli login i hasło są wpisane, to przetwarzamy je tak, aby nie działały tagi i skrypty, nigdy nie wiadomo, co ludzie mogą wpisać
    $login = stripslashes($login);
    $login = htmlspecialchars($login);
    $hasło = stripslashes($hasło);
    $password = htmlspecialchars($password);
    // usuń dodatkowe spacje
    $logowanie = przycinanie($logowanie);
    $hasło = przyciąć($hasło);
    // połącz się z bazą danych
    include("bd.php");// plik bd.php powinien znajdować się w tym samym folderze co wszyscy inni, jeśli nie, po prostu zmień ścieżkę

    $result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //pobranie z bazy danych wszystkich danych o użytkowniku z wprowadzonym loginem
    $mojrow = mysql_fetch_array($wynik);
    if (pusty($myrow["haslo"]))
    {
    //jeśli użytkownik z podanym loginem nie istnieje
    }
    w przeciwnym razie(
    //jeśli istnieje, sprawdź hasła
    if ($myrow["hasło"]==$hasło) (
    //jeśli hasła się zgadzają, rozpoczynamy sesję dla użytkownika! Możesz mu pogratulować, wszedł!
    $_SESSION["zaloguj"]=$myrow["zaloguj"];
    $_SESSION["id"]=$myrow["id"];//te dane są bardzo często używane, więc zalogowany użytkownik je "przeniesie"
    echo "Zalogowałeś się do serwisu pomyślnie! Strona główna";
    }
    w przeciwnym razie(
    //jeśli hasła się nie zgadzają

    Exit("Przepraszamy, wprowadzony login lub hasło jest nieprawidłowe.");
    }
    }
    ?>

    OK, już po wszystkim! Może lekcja jest nudna, ale bardzo przydatna. Tutaj pokazany jest tylko pomysł rejestracji, następnie można go ulepszyć: dodać ochronę, projekt, pola danych, wgrać awatary, wylogować się ze swojego konta (w tym celu wystarczy zniszczyć zmienne z sesji funkcją nieoprawny) i tak dalej. Powodzenia!

    Sprawdziłem wszystko, działa dobrze!