Registrácia výkonného php. Vytvorenie neuveriteľne jednoduchého registračného systému s PHP a MySQL
04.06.2019
Reg.ru: domény a hosting
Najväčší registrátor a poskytovateľ hostingu v Rusku.
V prevádzke je viac ako 2 milióny doménových mien.
Propagácia, mail pre doménu, riešenia pre podnikanie.
Svoj výber si už vybralo viac ako 700 tisíc zákazníkov po celom svete.
*Presunutím myšou pozastavíte rolovanie.
Späť dopredu
Vytvorenie jednoduchého systému registrácie používateľov v PHP a MySQL
Vytvorenie registračného systému je veľa práce. Musíte napísať kód, ktorý overí e-mailové adresy, odošle potvrdzovací e-mail, overí ďalšie polia formulára a oveľa viac.
A aj keď toto všetko napíšete, používatelia sa budú zdráhať registrovať, pretože. vyžaduje si to určité úsilie z ich strany.
V tomto návode vytvoríme veľmi jednoduchý prihlasovací systém, ktorý vôbec nevyžaduje ani neukladá heslá! Výsledok bude možné ľahko upraviť a pridať na už existujúcu stránku PHP. Chcete zistiť, ako to funguje? Prečítajte si nižšie.
Náš super jednoduchý systém by fungoval takto:
Spojíme autorizačný formulár a registráciu. Tento formulár bude obsahovať pole na zadanie e-mailovej adresy a tlačidlo registrácie; - Pri vyplnení poľa emailovou adresou sa kliknutím na tlačidlo registrácie vytvorí záznam o novom užívateľovi, avšak len v prípade, že zadaná emailová adresa nebola nájdená v databáze.
Potom sa vytvorí náhodná jedinečná sada znakov (token), ktorá sa odošle na poštu určenú používateľom vo forme odkazu, ktorý bude relevantný 10 minút; - Kliknutím na odkaz prejde používateľ na našu webovú stránku. Systém určí prítomnosť tokenu a autorizuje používateľa;
Výhody tohto prístupu:
Nie je potrebné ukladať heslá a overovať polia; - Nie je potrebné obnovenie hesla, tajné otázky atď.; - Od momentu registrácie/prihlásenia používateľa si môžete byť vždy istý, že tento používateľ bude vo vašej prístupovej zóne (že e-mailová adresa je pravdivá); - Neuveriteľne jednoduchý proces registrácie;
Nevýhody:
Zabezpečenie používateľského účtu. Ak má niekto prístup k pošte používateľa, môže sa prihlásiť. - E-mail nie je bezpečný a možno ho zachytiť. Majte na pamäti, že táto otázka je relevantná aj v prípade, keď bolo heslo zabudnuté a je potrebné ho obnoviť, alebo v akomkoľvek autorizačnom systéme, ktorý nepoužíva HTTPS na prenos dát (login / heslo); - Pokiaľ nastavíte poštový server podľa potreby, existuje šanca, že správy s autorizačnými odkazmi skončia v spame;
Pri porovnaní výhod a nevýhod nášho systému môžeme konštatovať, že systém má vysokú využiteľnosť (maximálny komfort pre koncového užívateľa) a zároveň má nízky bezpečnostný indikátor.
Preto sa navrhuje používať ho na registrácie na fórach a službách, ktoré nepracujú s dôležitými informáciami.
Ako používať tento systém
V prípade, že potrebujete iba použiť systém na autorizáciu používateľov na vašej lokalite a nechcete túto lekciu rozoberať, musíte urobiť nasledovné:
Musíte si stiahnuť zdrojové súbory priložené k lekcii - Nájdite súbor v archíve tables.sql Importujte ho do svojej databázy pomocou možnosti importu v phpMyAdmin. Alternatívny spôsob: otvorte tento súbor v textovom editore, skopírujte SQL dotaz a spustite ho; - Otvorené obsahuje/main.php a vyplňte nastavenia pre pripojenie k vašej databáze (uveďte používateľa a heslo pre pripojenie k databáze, ako aj hostiteľa a názov databázy). V tom istom súbore musíte zadať aj e-mailovú adresu, ktorá sa použije ako pôvodná adresa pre správy odoslané systémom. Niektorí hostitelia budú blokovať odchádzajúce e-maily, kým sa vo formulári nezobrazí skutočná e-mailová adresa, ktorá bola vytvorená z ovládacieho panela hostiteľa, takže zadajte skutočnú adresu; - Stiahnite si všetky súbory index.php, protected.php a aktíva a zložky cez FTP do vášho hostiteľa; - Pridajte nižšie uvedený kód na každú stránku PHP, kde chcete zobraziť autorizačný formulár;
Pre tých, ktorých zaujíma, ako to celé funguje, čítajte ďalej!
Prvým krokom je napísanie HTM kódu pre autorizačný formulár. Tento kód sa nachádza v súbore index.php. Tento súbor obsahuje aj PHP kód, ktorý spracováva údaje formulára a ďalšie užitočné funkcie autorizačného systému. Viac sa o tom môžete dozvedieť v sekcii kontroly kódu PHP nižšie.
index.php
Návod: Super jednoduchý registračný systém s PHP a MySQL
V sekcii hlavy (medzi značkami
A) Zahrnul som hlavné štýly (v tomto návode nie sú analyzované, takže si ich môžete pozrieť sami. Priečinok aktív/css/style.css). Pred záverečnou značkou
Zahrnul som knižnicu jQuery a súbor script.js, ktoré napíšeme a analyzujeme nižšie.
JavaScript
jQuery sleduje stav tlačidla „Zaregistrovať sa/Prihlásiť sa“ s funkciou e.preventDefault() a odosiela požiadavky AJAX. V závislosti od odpovede servera zobrazí konkrétnu správu a určí ďalšie akcie /
bol do formulára pridaný na zobrazenie aktuálneho stavu požiadavky AJAX (toto bolo možné vďaka metódam ajaxStart()) A ajaxComplete(), ktorý nájdete na konci súboru).
Táto trieda zobrazuje otáčajúci sa animovaný súbor gif (akoby nám naznačoval, že požiadavka sa spracováva) a tiež funguje ako príznak, ktorý zabraňuje opätovnému odoslaniu formulára (keď sa už raz kliklo na tlačidlo registrácie). Trieda .prihlásený- toto je iný príznak - nastavený pri odoslaní e-mailu. Tento príznak okamžite zablokuje akúkoľvek ďalšiu akciu vo formulári.
Schéma databázy
Náš neuveriteľne jednoduchý systém protokolovania používa 2 tabuľky MySQL (kód SQL je v súbore tables.sql). Prvý ukladá údaje o používateľských účtoch. V druhom sú uložené informácie o počte pokusov o prihlásenie.
Schéma užívateľskej tabuľky.
Systém nepoužíva heslá, čo je vidieť na diagrame. Na ňom môžete vidieť stĺpec žetón so žetónmi susediacimi so stĺpcom platnosť_tokenu. Token sa nastaví hneď, ako sa používateľ pripojí k systému, nastaví svoj e-mail na odoslanie správy (o tom trochu viac v ďalšom bloku). Stĺpec platnosť_tokenu nastaví čas o 10 minút neskôr, po ktorom už token nie je platný.
Schéma tabuľky, ktorá počíta počet pokusov o autorizáciu.
V oboch tabuľkách je IP adresa uložená v spracovanej forme pomocou funkcie ip2long v celočíselnom poli.
Teraz môžeme napísať nejaký PHP kód. Hlavná funkcionalita systému je priradená triede user.class.php ktoré môžete vidieť nižšie.
Táto trieda aktívne využíva idorm (docs), tieto knižnice sú minimom nevyhnutných nástrojov pre prácu s databázami. Zaoberá sa prístupom k databáze, generovaním tokenov a validáciou. Je to jednoduché rozhranie, ktoré uľahčuje pripojenie registračného systému k vašej stránke, ak používa PHP.
user.class.php
Class User( // Private ORM case private $orm; /** * Vyhľadanie používateľa podľa tokenu. Do úvahy sa berú iba platné tokeny. Token sa generuje iba 10 minút od okamihu, keď bol vytvorený * @param string $token . Toto je ten, ktorý hľadáte token * @return User. Vráťte hodnotu funkcie Používateľ */ verejná statická funkcia findByToken($token)( // nájdite token v databáze a uistite sa, že je nastavená správna časová pečiatka $ vysledok = ORM::for_table("reg_users") ->where ("token", $token) ->where_raw("platnost_tokenu > TERAZ()") ->find_one(); if(!$result)( return false; ) return new User($result); ) /** * Autorizácia alebo registrácia používateľa * @param string $email.E-mailová adresa používateľa * @return User */ verejná statická funkcia loginOrRegister($email)( // Ak takýto používateľ už existuje, vráťte hodnotu funkcie Používateľ zo zadanej e-mailovej adresy uloženej v databáze if(User::exists($email))( return new User($email); ) // V opačnom prípade vytvorte nového používateľa tel v databáze a vráti hodnotu funkcie User::create zo zadaného emailu return User::create($email); ) /** * Vytvorenie nového užívateľa a uloženie do databázy * @param string $email. E-mailová adresa používateľa * @return User */ súkromná statická funkcia create($email)( // Zaregistrujte nového používateľa a vráťte výsledok funkcie používateľa z týchto hodnôt $result = ORM::for_table("reg_users")- >create(); $result->email = $email; $result->save(); return new User($result); ) /** * Skontrolujte, či takýto používateľ existuje v databáze a vráťte boolovskú hodnotu premenná * @param reťazec $email. E-mailová adresa používateľa * @return boolean */ existuje verejná statická funkcia ($email)( // Existuje používateľ v databáze? $result = ORM::for_table("reg_users") ->where("e-mail", $email ) ->count(); return $result == 1; ) /** * Vytvorenie nového používateľského objektu * @param inštancia $param ORM , id, email alebo 0 * @return User */ verejná funkcia __construct($param = null) ( if($param instanceof ORM)( // kontrola ORM prebehla $this->orm = $param; ) else if(is_string($param))( // Kontrola e-mailu prebehla $this->orm = ORM:: for_table ("reg_users") ->where("email", $param) ->find_one(); ) else( $id = 0; if(is_numeric($param))( // ID používateľa je odovzdaná hodnota $ param premenná $id = $param; ) else if(isset($_SESSION["loginid"]))( // Inak pozri reláciu $id = $_SESSION["loginid"]; ) $this->orm = ORM:: for_table( "reg_users") ->where("id", $id) ->find_one(); ) ) /** * Vygenerujte nový autorizačný token SHA1, píše do databázy a vráti svoju hodnotu * @return string */ verejná funkcia vygenerovaťToken()( // Vygenerovať token pre oprávneného používateľa a uložiť ho do databázy $token = sha1($this->email.time().rand (0,1000000)); // Uložte token do databázy // A označte ho ako platný iba na nasledujúcich 10 minút $this->orm->set("token", $token); $this->orm->set_expr("platnosť_tokenu", "ADDTIME(NOW(),"0:10")"); $this->orm->save(); vrátiť $token; ) /** * Autorizácia používateľa * @return void */ public function login()( // Označenie používateľa ako prihláseného $_SESSION["loginid"] = $this->orm->id; // Aktualizácia hodnoty databázového poľa last_login $this->orm->set_expr("last_login", "NOW()"); $this->orm->save(); ) /** * Zničiť reláciu a odhlásiť používateľa * @return void */ odhlásenie z verejnej funkcie ()( $_SESSION = array(); unset($_SESSION); ) /** * Skontrolujte, či je používateľ prihlásený * @return boolean */ verejná funkcia prihlásený()( return isset($) this->orm->id) && $_SESSION["loginid"] == $this->orm->id; ) /** * Skontrolujte, či je používateľ správcom * @return boolean */ public function isAdmin() ( return $this->rank() = = "administrator"; ) /** * Nájdite typ používateľa, môže to byť správca alebo bežný * @reťazec návratu */ public function rank()( if($this->orm- >rank == 1)( return "administrator"; ) return "regular"; ) /** * Metóda, ktorá vám umožňuje získať súkromné informácie * ako vlastnosti objektu používateľa * @param string $key Názov vlastnosti, ku ktorej sa pristupuje * @return mixed */ public function __get($key)( if(isset($this->orm->$key)) ( return $this->orm->$key; ) return null; ))
Tokeny sa generujú pomocou algoritmu SHA1 a ukladajú sa do databázy. Používam časové funkcie MySQL na nastavenie 10-minútového limitu vypršania platnosti tokenu.
Keď token prejde overovacou procedúrou, priamo informujeme obsluhu, že berieme do úvahy len tokeny, ktorým ešte neskončila platnosť, uložené v stĺpci token_validity.
Upozorňujeme, že používam magickú metódu __získať knižnicu dokumentov na konci súboru na zachytenie prístupu k vlastnostiam objektu používateľa.
Vďaka tomu je možné vďaka vlastnostiam pristupovať k informáciám uloženým v databáze $user->e-mail, $user->token atď. V nasledujúcom úryvku kódu si uveďme príklad použitia týchto tried.
Chránená stránka
Ďalším súborom, v ktorom sú uložené užitočné a potrebné funkcie, je súbor funkcie.php. Nachádza sa tu niekoľko takzvaných pomocníkov – pomocných funkcií, ktoré umožňujú vytvárať čistejší a čitateľnejší kód v iných súboroch.
funkcie.php
Funkcia send_email($from, $to, $subject, $message)( // Pomocník, ktorý odosiela e-maily $headers = "MIME-Verzia: 1.0" . "\r\n"; $headers .= "Typ obsahu: text /plain; charset=utf-8" . "\r\n"; $headers .= "Od: ".$from . "\r\n"; vrátiť poštu($to, $predmet, $správa, $hlavičky ); ) function get_page_url()( // Získanie URL súboru PHP $url = "http".(prázdne($_SERVER["HTTPS"])?"":"s")."://".$_SERVER [ "SERVER_NAME"]; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")( $url.= $_SERVER["REQUEST_URI"]; ) else( $url. = $_SERVER["PATH_INFO"]; ) návrat $url; ) funkcia rate_limit($ip, $limit_hour = 20, $limit_10_min = 10)( // Počet pokusov o prihlásenie za poslednú hodinu na tejto IP adrese $count_hour = ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00")") ->count(); // Počet pokusov o prihlásenie za posledných 10 minút na tejto IP adrese $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprint f("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"0:10")") ->count(); if($count_hour > $limit_hour || $count_10_min > $limit_10_min)( throw new Exception("Príliš veľa pokusov o prihlásenie!"); ) ) funkcia rate_limit_tick($ip, $email)( // Vytvorenie nového záznamu v tabuľke počítanie počtu pokusov o prihlásenie $login_attempt = ORM::for_table("reg_login_attempt")->create(); $login_attempt->email = $email; $login_attempt->ip = sprintf("%u", ip2long($ip) ); $login_attempt->save(); ) function redirect($url)( header("Location: $url"); exit; )
Funkcie sadzba_limit A rate_limit_tick sledovať počet pokusov o autorizáciu za časové obdobie, ktoré uplynulo od prvého pokusu. Pokus o prihlásenie sa zaznamená do databázy v stĺpci reg_login_attempt. Tieto funkcie sa volajú pri spracovávaní a odosielaní údajov formulára, ako môžete vidieť v nasledujúcom útržku kódu.
Nižšie uvedený kód je prevzatý zo súboru index.php a spracováva odoslanie formulára. Vracia odpoveď JSON, ktorá je následne spracovaná jQuery v súbore aktíva/js/script.js o ktorých sme už hovorili skôr.
index.php
Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Výstup hlavičky JSON("Content-type: application/json"); // Je táto e-mailová adresa platná, ak (!isset($_POST["e-mail"]) || !filter_var($_POST["e-mail"], FILTER_VALIDATE_EMAIL))( throw new Exception("Zadajte platný e-mail."); ) // Skontrolujte. Je používateľ sa môže prihlásiť, prekročil počet povolených pripojení? (viac informácií v súbore functions.php) rate_limit($_SERVER["REMOTE_ADDR"]); // Zaznamenať tento pokus o prihlásenie rate_limit_tick($_SERVER["REMOTE_ADDR"] , $ _POST["e-mail"]); // Odoslať e-mail používateľovi $message = ""; $email = $_POST["e-mail"]; $subject = "Váš odkaz na prihlásenie"; if(!User:: existuje($email) )( $subject = "Ďakujeme za registráciu!"; $message = "Ďakujeme za registráciu na našej stránke!\n\n"; ) // Pokus o autorizáciu alebo registráciu používateľa $user = Používateľ ::loginOrRegister($_POST[ "e-mail"]); $message.= "Môžete sa prihlásiť z tejto adresy URL:\n" ; $message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; $message.= "Platnosť odkazu vyprší automaticky po 10 minútach."; $vysledok = send_email($fromEmail, $_POST["e-mail"], $predmet, $sprava); if(!$result)( throw new Exception("Pri odosielaní vášho e-mailu sa vyskytla chyba. Skúste to znova."); ) die(json_encode(array("message" => "Ďakujeme! Poslali sme odkaz) do svojej doručenej pošty. Skontrolujte si aj priečinok so spamom.")))); ) ) catch(Exception $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage( )))))
Po úspešnej autorizácii/registrácii pošle vyššie uvedený kód užívateľovi odkaz na autorizáciu. Token sa stáva dostupným, pretože je odovzdaná ako premenná vo vygenerovanom odkaze metódou $_GET s fixkou tkn
index.php
If(isset($_GET["tkn"]))( // Je tento token platný na autorizáciu? $user = User::findByToken($_GET["tkn"]); if($user)( // Áno , je. Presmerujte na chránenú stránku $user->login(); redirect("protected.php"); ) // Nie, token nie je platný. Presmerujte na stránku s prihlasovacím/registračným formulárom redirect("index. php");)
$user->login()
vytvorí potrebné premenné pre reláciu, takže používateľ, ktorý si prezerá nasledujúce stránky lokality, zostane po celý čas autorizovaný.
Podobne je usporiadané spracovanie funkcie na ukončenie systému.
index.php
If(isset($_GET["logout"]))( $user = new User(); if($user->loggedIn())( $user->logout(); ) redirect("index.php") ;)
Na konci kódu som opäť presmeroval na index.php, teda parameter ?logout=1 odovzdaný URL nie je povinný.
Náš súbor index.php vyžaduje dodatočné ochrana - nechceme, aby ľudia, ktorí sa niekedy prihlásili do systému, znova videli registračný formulár. Na tieto účely používame metódu $user->loggedIn().
Nakoniec je tu kúsok kódu, ktorý vám umožňuje chrániť stránky vášho webu a sprístupniť ho až po autorizácii.
protected.php
// Na zabezpečenie každej stránky na vašom webe zahrňte súbor // main.php a vytvorte nový objekt používateľa. Takto je to jednoduché! require_once "includes/main.php"; $user = novy User(); if(!$user->loggedIn())( redirect("index.php"); )
Po tejto kontrole si môžete byť istí, že používateľ bol úspešne autorizovaný. K uloženým informáciám v databáze môžete pristupovať aj pomocou vlastností objektu $user. Ak chcete zobraziť e-mail a stav používateľa, použite tento kód:
Metóda rank() sa tu používa preto, lebo čísla sú väčšinou uložené v databáze (0 pre bežného užívateľa, 1 pre administrátora) a tieto údaje potrebujeme previesť do stavov, do ktorých patria, v čom nám tento spôsob pomáha.
Ak chcete z bežného používateľa urobiť administrátora, jednoducho upravte záznam používateľa cez phpMyAdmin (alebo akýkoľvek iný program, ktorý vám umožňuje spravovať databázy). Stav správcu nedáva žiadne privilégiá, v tomto príklade sa na stránke zobrazí, že ste správcom – a to je všetko.
Ale čo s tým - zostáva na vašom uvážení, môžete sami napísať a zostaviť kód, ktorý nastaví určité privilégiá a príležitosti pre správcov.
Skončili sme!
S týmto neuveriteľne super kvázi jednoduchým tvarom máme hotovo! Môžete ho použiť na svojich PHP stránkach, je to celkom jednoduché. Môžete si ho tiež upraviť pre seba a urobiť tak, ako chcete.
Materiál pripravil Denis Malyshok špeciálne pre túto stránku
P.S. Chcete sa posunúť ďalej v ovládaní PHP a OOP? Pozrite si prémiové tutoriály o rôznych aspektoch tvorby webových stránok vrátane programovania PHP, ako aj bezplatný kurz budovania systému PHP CMS od nuly pomocou OOP:
Páčil sa vám materiál a chcete sa poďakovať? Stačí zdieľať so svojimi priateľmi a kolegami!
Proces vytvárania registračného systému je pomerne veľa práce. Musíte napísať kód, ktorý kontroluje platnosť e-mailových adries, odosiela potvrdzovacie e-maily, ponúka obnovenie hesla, ukladá heslá na bezpečné miesto, overuje vstupné formuláre a ďalšie. Aj keď toto všetko urobíte, používatelia sa budú zdráhať registrovať, pretože aj tá najmenšia registrácia si vyžaduje ich aktivitu.
V dnešnom návode vyvinieme jednoduchý prihlasovací systém, kde nepotrebujete žiadne heslá! V dôsledku toho získame systém, ktorý je možné jednoducho upraviť alebo integrovať do existujúcej stránky PHP. Ak máte záujem, pokračujte v čítaní.
PHP
Teraz sme pripravení prejsť na kód PHP. Hlavnú funkcionalitu registračného systému zabezpečuje trieda Používateľ, ktorú môžete vidieť nižšie. Trieda používa (), čo je minimalistická databázová knižnica. Trieda User je zodpovedná za prístup k databázam, generovanie tokenov na prihlásenie a ich overovanie. Poskytuje nám jednoduché rozhranie, ktoré možno ľahko začleniť do registračného systému na vašich stránkach založených na PHP.
user.class.php
// Súkromná inštancia ORM súkromný $orm;
/** * Nájdite používateľa podľa reťazca tokenov. Do úvahy sa berú iba platné tokeny * úvaha. Token je platný 10 minút po jeho vygenerovaní. * @param string $token Token, ktorý sa má vyhľadať * @returnUser */
verejná statická funkcia findByToken($token)(
// nájdite ho v databáze a uistite sa, že časová pečiatka je správna
odhlásenie verejnej funkcie()( $_SESSION = pole (); unset($_SESSION); }
/** * Skontrolujte, či je používateľ prihlásený. * @return boolean */
Verejná funkcia prihlásený()( return isset($this->orm->id) && $_SESSION["loginid"] == $this->orm->id; }
/** * Skontrolujte, či je používateľ správcom * @return boolean */
Verejná funkcia isAdmin()( return $this->rank() == "administrator"; }
/** * Nájdite typ používateľa. Môže to byť buď admin alebo obyčajný. * @reťazec návratu */
verejná funkcia rank()( if($this->orm->rank == 1)( vrátiť "správca"; }
Návrat "pravidelný"; }
/** * Magická metóda pre prístup k prvkom súkromia * $orm inštancia ako vlastnosti objektu užívateľa * @param string $key Názov sprístupnenej vlastnosti * @návrat zmiešaný */
Verejná funkcia __get($key)( if(isset($this->orm->$key))( return $this->orm->$key; }
return null; } }
Tokeny sa generujú pomocou algoritmu a ukladajú sa do databázy. Z MySQL používame na nastavenie hodnoty v stĺpci token_validity na 10 minút. Pri validácii tokenu povieme enginu, že potrebujeme token, pole token_validity ešte nevypršalo. Obmedzujeme tak dobu, počas ktorej bude token platný.
Všimnite si, že na prístup k vlastnostiam objektu používateľa používame metódu magic __get() na konci dokumentu. To nám umožňuje pristupovať k údajom uloženým v databáze ako vlastnosti: $user->email, $user->token. Pozrime sa ako príklad, ako môžeme použiť túto triedu v nasledujúcom útržku kódu:
Ďalším súborom, ktorý uchováva potrebnú funkcionalitu, je functions.php. Tam máme niekoľko pomocných funkcií, ktoré nám umožňujú udržať zvyšok kódu upratanejší.
Funkcie.php
Funkcia send_email($from, $to, $predmet, $správa)(
presmerovanie funkcie($url)( header("Umiestnenie: $url"); východ; }
Funkcie rate_limit a rate_limit_tick nám umožňujú obmedziť počet pokusov o autorizáciu na určité časové obdobie. Pokusy o autorizáciu sa zaznamenávajú v databáze reg_login_attempt. Tieto funkcie sa spúšťajú pri odoslaní prihlasovacieho formulára, ako môžete vidieť v nasledujúcom úryvku kódu.
Nižšie uvedený kód bol prevzatý z index.php a je zodpovedný za overenie prihlasovacieho formulára. Vracia odpoveď JSON, ktorá je riadená kódom jQuery, ktorý sme videli v aktívach/js/script.js.
// Toto vyvolá výnimku, ak je osoba vyššie // limity povolených pokusov o prihlásenie (viac nájdete na functions.php): rate_limit($_SERVER["REMOTE_ADDR"]);
// Zaznamenajte tento pokus o prihlásenie rate_limit_tick($_SERVER["REMOTE_ADDR"], $_POST["e-mail"]);
If(!$result)( throw new Exception("Pri odosielaní vášho e-mailu sa vyskytla chyba. Skúste to znova."); }
Die(json_encode(pole( "message" => "Ďakujeme! Poslali sme odkaz do vašej doručenej pošty. Skontrolujte si aj priečinok so spamom." ))); } } catch(Výnimka $e)(
Die(json_encode(pole( "error"=>1, "message" => $e->getMessage() ))); }
Po úspešnej autorizácii alebo registrácii odošle vyššie uvedený kód osobe e-mail s odkazom na autorizáciu. Token (token) bude dostupný ako premenná $_GET „tkn“ vďaka vygenerovanej adrese URL.
index.php
If(isset($_GET["tkn"]))(
// Je toto platný prihlasovací token? $user = User::findByToken($_GET["tkn"]);
//Áno! Prihláste používateľa a presmerujte ho na chránenú stránku.
$user->login(); redirect("chránené.php"); }
// Neplatný Token. Presmerujte späť na prihlasovací formulár. redirect("index.php"); }
Spustenie $user->login() vytvorí potrebné premenné pre reláciu, čo používateľovi umožní zostať prihlásený pri ďalších prihláseniach.
Odhlásenie zo systému sa realizuje približne rovnakým spôsobom:
Index.php
If(isset($_GET["logout"]))(
$user = novy User();
If($user->loggedIn())( $user->logout(); }
redirect("index.php"); }
Na konci kódu používateľa opäť presmerujeme na index.php, takže parameter ?logout=1 v URL je vylúčený.
Náš súbor index.php bude tiež potrebovať ochranu - nechceme, aby formulár videli už prihlásení užívatelia. Na tento účel používame metódu $user->loggedIn():
Index.php
$user = novy User();
if($user->prihlásený())( redirect("chránené.php"); }
Nakoniec sa pozrime, ako môžete zabezpečiť stránku na svojom webe a sprístupniť ju až po prihlásení:
protected.php
// Na ochranu akejkoľvek stránky php na vašom webe zahrňte main.php // a vytvorte nový objekt používateľa. Je to také jednoduché!
require_once "includes/main.php";
$user = novy User();
if(!$user->prihlásený())( redirect("index.php"); }
Po tejto kontrole si môžete byť istí, že sa používateľ úspešne prihlásil. Budete mať tiež prístup k údajom uloženým v databáze ako vlastnosti objektu $user. Ak chcete zobraziť e-mail používateľa a jeho hodnotenie, použite nasledujúci kód:
echo "Váš email: ".$user->e-mail; echo "Vaša hodnosť: ".$user->rank(); Rank() je tu metóda, pretože stĺpec hodnotenia v databáze zvyčajne obsahuje čísla (0 pre bežných používateľov a 1 pre správcov) a musíme to všetko previesť na názvy hodnotení, čo sa implementuje pomocou tejto metódy. Ak chcete previesť normálneho používateľa na správcu, jednoducho upravte záznam používateľa v phpmyadmin (alebo inom databázovom programe). Používateľ ako správca nebude vybavený žiadnymi špeciálnymi schopnosťami. Vy sami máte právo vybrať si, aké práva udelíte správcom.
Pripravený!
Na to je náš jednoduchý registračný systém pripravený! Môžete ho použiť na existujúcej PHP stránke, alebo si ho môžete upgradovať podľa vlastných potrieb.
Nie je to tak dávno, čo ma jeden z mojich návštevníkov požiadal, aby som napísal článok o ako zaregistrovať a autorizovať používateľov na stránke. V skutočnosti spĺňam jeho požiadavku a v tomto článku budem hovoriť o tom, ako sa to robí.
Spôsobov je viacero vytvorenie registrácie a autorizácie používateľa, ale v tomto článku rozoberiem moje obľúbené - cez mechanizmus relácií alebo cookies.
V prvom rade, ak chcete zaregistrujte sa na svojej webovej stránke, potom musíte pochopiť, kde budú údaje používateľa uložené. Môže byť uložený v obyčajnom textovom súbore, v XML súbor alebo v databáze. Prvé dve možnosti sú veľmi nebezpečné, preto vám ich neodporúčam používať. A tu je tretia možnosť - ukladanie informácií o užívateľoch do databázy- najobľúbenejší a odporúčam vám použiť tento spôsob ukladania informácií.
Miesto uloženia je rozhodnuté. Teraz poďme priamo na autorizačný algoritmus:
Vytvorte registračný formulár na HTML.
Získajte údaje z formulára v skripte obslužného programu.
Skontrolujte prijaté údaje a ak sú nesprávne, presmerujte sa späť na registračný formulár.
Ak sú údaje správne, zapíšte ich do databázy.
To je celý proces registrácia užívateľa na stránke. To znamená, že registrácia je uchovávanie informácií o používateľovi na stránke.
Ďalšou položkou je autorizáciu používateľa na stránke, ale skôr, ako k nemu pristúpim, poviem vám o jednom dôležitom bode v registračnom formulári - o hesle. Dôrazne vám odporúčam, aby ste heslá neukladali ako čistý text (napríklad „ 123456
"). Nezabudnite ich zašifrovať aspoň pomocou funkcie md5(). A uložte zašifrované heslo do databázy.
Teraz autorizácia. Prvá vec, ktorú musíte pochopiť, je, že autorizačné informácie musia byť niekde uložené. Najjednoduchšou možnosťou je ukladať informácie do relácie (alebo do cookie). A teraz algoritmus:
Vytvorte autorizačný formulár používateľa na HTML kde bude musieť používateľ zadať svoje používateľské meno a heslo.
V skripte obsluhy prijmite údaje od používateľa. Ak ste ma počúvali a ukladali si zašifrované heslá do databázy, tak najprv zašifrujte prijaté heslo. Ak databáza obsahuje otvorené heslá, nie je potrebné šifrovať.
Skontrolujte správnosť zadaných údajov a ak sa prihlasovacie meno a heslo zhoduje s existujúcim používateľom v databáze, napíšte na cookie alebo informácie o relácii s prihlasovacím menom a zašifrovaným heslom (alebo otvoreným heslom, ak ste ho nezašifrovali).
Ak je prihlasovacie meno a/alebo heslo zadané nesprávne, prejdite späť na autorizačný formulár.
Teraz máte potrebné informácie o autorizácia užívateľa, ktorý je uložený v cookie alebo na serveri (ak je relácia). V skutočnosti teraz musíte tieto informácie skontrolovať na každej stránke lokality a skontrolovať ich rovnakým spôsobom ako pri kontrole autorizačného formulára. To znamená, že čítajte z cookie(relácia) prihlasovacie meno a heslo a skontrolujte ho. Ak sú správne, zobrazte jednu stránku (pre registrovaných používateľov) a ak sú nesprávne, zobrazte ďalšiu stránku (pre hostí).
A posledný. Ako sa vyrába tlačidlo? Výkon"? Veľmi jednoduché. Stlačením tohto tlačidla sa cookie alebo reláciu. Používateľ je teda zo stránky automaticky odhlásený.
Ako vidíte, všetko je elementárne, ale pri implementácii tohto algoritmu budete mať určite veľa otázok. Napríklad, čo robiť pri registrácii používateľa, ktorého prihlasovacie meno je už v databáze. Implementácia rôznych vstupných kontrol, implementácia kontroly existencie e-mail a tak ďalej - to všetko je dosť komplikované, ak to robíte prvýkrát. Najviac šťavy som však vydal. Ak máte nejaké otázky počas implementácie, opýtajte sa buď na fóre alebo v komentároch.
Ahoj! Teraz sa pokúsime implementovať najjednoduchšiu registráciu na stránke pomocou PHP + MySQL. Na tento účel musí byť na vašom počítači nainštalovaný Apache. Ako funguje náš skript, je uvedené nižšie.
1. Začnime vytvorením tabuľky užívateľov v databáze. Bude obsahovať používateľské údaje (login a heslo). Poďme na phpmyadmin (ak si vytvoríte databázu na svojom PC http://localhost/phpmyadmin/). Vytvorte tabuľku používateľov, bude mať 3 polia.
Vytvorím ho v databáze mysql, môžete si ho vytvoriť v inej databáze. Ďalej nastavte hodnoty ako na obrázku:
2. Vyžaduje sa pripojenie k tejto tabuľke. Vytvorme súbor bd.php. Jej obsah:
$db = mysql_connect("váš server MySQL","prihlásenie na tento server","heslo na tento server"); mysql_select_db ("názov databázy na pripojenie", $db); ?>