Evidentiary auth registrace php. Vytvoření jednoduchého systému registrace uživatelů v PHP a MySQL

Každý, kdo vyvíjí webové stránky, dříve nebo později čelí takovému úkolu, jako je autorizace a autentizace uživatele, implementované přesně pomocí programovacího jazyka a nepoužívající standard protokolu http. Dnes se podíváme na příklad vytvoření jednoduché autorizace pomocí programovacího jazyka PHP a uživatelská data uložíme do databáze MySQL.

Níže uvedená metoda je jednoduchá, nebo jakoby základ pro vytvoření normální autorizace, ale můžete ji snadno použít, protože funguje docela dobře a můžete ji také sami vylepšit a implementovat na svůj web.

Tento způsob je založen na relacích, ale já zde používám i cookies, aby si prohlížeč pamatoval uživatele, který se autentizoval minule, abych pokaždé nezadával login, heslo si samozřejmě můžete uložit do cookies, ale toto není zabezpečený, i když je šifrovaný. Chcete-li relaci ukončit, jednoduše zavřete prohlížeč a znovu jej otevřete.

Vytváření objektů v databázi

Pojďme k praxi. Nejprve si vytvoříme tabulku pro ukládání uživatelských dat do databáze MySQL. Doporučuji použít jednoduchou strukturu tabulky ( Samozřejmě to můžete něčím doplnit, moje databáze se jmenuje test a v tabulce jsou uživatelé):

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

A hned do této tabulky přidáme jeden záznam:

Vložit do test.users (user_login, user_password) hodnoty ​​("mylogin","202cb962ac59075b964b07152d234b70")

Celkem jsme dostali:

  • Přihlášení– mylogin;
  • Heslo -;

Heslo samozřejmě uložíme v hašované podobě, protože uložení hesla v čistém textu není, mírně řečeno, bezpečné. Náš výše uvedený hash hesla je 123, takže když zadáme heslo do formuláře, zadáme přesně 123, a ne.

Vytvoření registračního formuláře

Aby se uživatel sám zaregistroval, vytvořte formulář, ze kterého budou údaje odeslány do souboru pro zpracování registrace, tzn. být zaznamenány v databázi. Zde je například nejjednodušší způsob:

0) ( $error = "Uživatel s tímto přihlášením"; ) // Pokud ne, přidejte nového uživatele if(!isset($error)) ( $login = mysql_real_escape_string(trim(htmlspecialchars($_POST[ "login" ]))) // Odstraňte mezery a zahashujte heslo $password = md5(trim($_POST["heslo"])); mysql_query("INSERT INTO users SET user_login="".$login.", user_password=" ".$password."""); echo "Úspěšně jste se zaregistrovali s přihlášením - ".$login; exit(); // pokud takové přihlášení existuje, pak o něm mluvte echo $error; ) ) //ve výchozím nastavení budou data odeslána do stejného tiskového souboru<<< html

Přihlášení
Heslo
html;

?> Mimochodem, s touto metodou je nejlepší používat pro přihlášení latinská písmena ( těch. angličtina ), pokud chcete napsat login v ruštině, budete muset kód mírně upravit. Soubor si můžete pojmenovat jak chcete ().

pro test jsem použil reg.html Poznámka!

Pro testování používám pouze jeden soubor, nazval jsem ho mylogin.html (kód souboru níže). Můžete to použít ve svých souborech a nazývat je jak chcete, samotný proces autorizace popisuji zde, takže jej můžete aplikovat všude. Mimochodem, ve všech souborech budete muset použít funkci session_start(); abyste mohli zkontrolovat, zda je uživatel autorizován nebo ne. A ještě něco, samozřejmě si zapište své nastavení pro připojení k databázi.

Vytvoření autorizačního formuláře
""Jste přihlášeni<<< html

Přihlášení
Heslo
Přihlášení

pro test jsem použil reg.html html;

) ?>

Pokud náhle váš php parser odmítne pracovat, tzn. Samotný php kód se vám zobrazí na obrazovce, pak prostě nemáte v html souborech povolené zpracování PHP. Nastavení se provádí v konfiguračním souboru webového serveru httpd.conf (pokud je Apache):

Komentoval jsem kód, takže si myslím, že by mělo být vše jasné. Dovolte mi ještě jednou připomenout, že do všech souborů, jejichž obsah nechcete zobrazovat neoprávněným uživatelům, musíte napsat session_start, a to je pravděpodobně vše. Pokud máte dotazy, ptejte se v komentářích. Hodně štěstí!

Ahoj! Nyní se pokusíme implementovat nejjednodušší registraci na webu pomocí PHP + MySQL. Chcete-li to provést, musí být na vašem počítači nainstalován Apache. Princip fungování našeho skriptu je zobrazen níže.

1. Začněme vytvořením tabulky uživatelů v databázi. Bude obsahovat uživatelská data (login a heslo). Pojďme na phpmyadmin (pokud vytváříte databázi na vašem PC http://localhost/phpmyadmin/). Vytvořte tabulku uživatelů, bude mít 3 pole.

Já to vytvářím v databázi mysql, můžete si to vytvořit v jiné databázi. Dále nastavte hodnoty jako na obrázku:

2. Je vyžadováno připojení k této tabulce. Vytvoříme soubor bd.php. Jeho obsah:

$db = mysql_connect("váš server MySQL","přihlášení pro tento server","heslo pro tento server");
mysql_select_db ("název databáze, ke které se připojujeme", $db);
?>

V mém případě to vypadá takto:

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

Uložit bd.php.
Velký! V databázi máme tabulku a připojení k ní. Nyní můžete začít vytvářet stránku, na které uživatelé zanechají svá data.

3. Vytvořte soubor reg.php s obsahem (všechny komentáře uvnitř):



Registrace


Registrace


















4. Vytvořte soubor, který zadá data do databáze a uloží uživatele. save_user.php(komentáře uvnitř):



{
}
//pokud je zadáno přihlašovací jméno a heslo, zpracujeme je tak, aby značky a skripty nefungovaly, nikdy nevíte, co lidé mohou zadat


//odstranit přebytečné mezery
$login = trim($login);
$heslo = trim($heslo);
// připojení k databázi
// kontrola existence uživatele se stejným přihlášením
$result = mysql_query("SELECT id FROM users WHERE login="$login"",$db);
if (!empty($myrow["id"])) (
exit("Omlouváme se, zadané přihlašovací údaje jsou již zaregistrovány. Zadejte prosím jiné přihlašovací údaje.");
}
// pokud tomu tak není, uložte data
$result2 = mysql_query("INSERT INTO users (login,password) VALUES("$login","$password")");
// Zkontrolujte, zda nejsou chyby
if ($result2=="TRUE")
{
echo "Úspěšně jste se zaregistrovali! Nyní můžete vstoupit na stránku. Domovská stránka";
}
jiný(
echo "Chyba! Nejste zaregistrováni.";
}
?>

5. Nyní se naši uživatelé mohou registrovat! Dále musíte vytvořit „dveře“ pro již registrované uživatele pro vstup na web. index.php(komentáře uvnitř):

// celý postup funguje v relacích. Je to místo, kde jsou uložena data uživatele, když je na webu. Je velmi důležité je spustit hned na začátku stránky!!!
session_start();
?>


Domovská stránka


Domovská stránka











Rejstřík



// Zkontrolujte, zda jsou proměnné login a user id prázdné
if (prázdné($_SESSION["login"]) nebo prázdné($_SESSION["id"]))
{
// Pokud je prázdné, pak odkaz nezobrazíme
echo "Jste přihlášeni jako host
Tento odkaz je dostupný pouze registrovaným uživatelům";
}
jiný
{

V souboru index.php Zobrazíme odkaz, který bude otevřen pouze registrovaným uživatelům. To je celý smysl skriptu – omezit přístup k jakýmkoli datům.

6. Zůstane soubor s ověřením zadaného loginu a hesla. testreg.php (komentáře uvnitř):

session_start();// celá procedura funguje na relacích. Je to místo, kde jsou uložena data uživatele, když je na webu. Je velmi důležité je spustit hned na začátku stránky!!!
if (isset($_POST["login"])) ( $login = $_POST["login"]; if ($login == "") ( unset($login);) ) //zadejte přihlašovací jméno zadané uživatelem uživatele do proměnné $login, pokud je prázdná, zničte proměnnou
if (isset($_POST["heslo"])) ( $password=$_POST["heslo"]; if ($password =="") ( unset($password);) )
//umístěte heslo zadané uživatelem do proměnné $password, pokud je prázdná, zničte proměnnou
if (empty($login) nebo empty($password)) //pokud uživatel nezadal přihlašovací jméno nebo heslo, vypíšeme chybu a zastavíme skript
{
exit("Nezadali jste všechny informace, vraťte se a vyplňte všechna pole!");
}
//pokud je zadáno přihlašovací jméno a heslo, zpracujeme je tak, aby značky a skripty nefungovaly, nikdy nevíte, co lidé mohou zadat
$login = stripslashes($login);
$login = htmlspecialchars($login);
$heslo = stripslashes($heslo);
$heslo = htmlspecialchars($heslo);
//odstranit přebytečné mezery
$login = trim($login);
$heslo = trim($heslo);
// připojení k databázi
include("bd.php");// soubor bd.php musí být ve stejné složce jako všechny ostatní, pokud tomu tak není, stačí změnit cestu

$result = mysql_query("SELECT * FROM users WHERE login="$login"",$db); //načte z databáze všechna data o uživateli se zadaným loginem
$myrow = mysql_fetch_array($vysledek);
if (empty($myrow["heslo"]))
{
//pokud uživatel se zadaným loginem neexistuje
}
jiný(
//pokud existuje, zkontrolujte hesla
if ($myrow["password"]==$password) (
//pokud se hesla shodují, spustíme relaci pro uživatele! Můžete mu gratulovat, dostal se!
$_SESSION["login"]=$myrow["login"];
$_SESSION["id"]=$myrow["id"];//tato data se používají velmi často, takže si je přihlášený uživatel „nosí s sebou“
echo "Úspěšně jste vstoupili na stránky! Domovská stránka";
}
jiný(
//pokud se hesla neshodují

Exit ("Omlouváme se, zadané přihlašovací jméno nebo heslo je nesprávné.");
}
}
?>

Tak a je to! Lekce je možná nudná, ale velmi užitečná. Zde je zobrazena pouze myšlenka registrace, poté ji můžete vylepšit: přidat ochranu, design, datová pole, načítání avatarů, odhlášení z účtu (k tomu jednoduše zničte proměnné z relace pomocí funkce odstaveno) a tak dále. Hodně štěstí!

Všechno jsem zkontroloval, funguje to správně!

Upozorňuji na velmi jednoduchý a funkční registrační a autorizační skript na webu, který se skládá ze 3 PHP souborů s propojením 2 java skriptů, pomocí kterých se chyby zobrazují v samotném formuláři bez opětovného načítání stránky.

Skript byl úspěšně testován na PHP 5.3.3 a PHP 5.6.3

Co skript umí a má

  • Registrovat nové uživatele;
  • Autorizovat uživatele a zaznamenávat soubory cookie po určitou dobu (není nutné se pokaždé přihlašovat);
  • Ukázat a skrýt určité informace pro oprávněné a neoprávněné uživatele;
  • Má ADMIN PANEL, kde můžete upravovat všechna data a mazat uživatele.

K dispozici jsou také DEMO a Admin Panely

KROK 1.
Pokud používáte lokální registrační a autorizační skript pomocí DENWER, pak pro připojení k databázi nemusíte provádět změny v souborech.
V opačném případě otevřete soubory: stayt.php, class/Auth.class.php a adminka/connect.php a úplně nahoře nahraďte údaje pro připojení k databázi svými.

KROK 2.
Přejděte (pokud používáte DENWER) na adresu: http://localhost/Tools/phpmyadmin/, pokud jste na hostingu, klikněte na Databáze a vytvořte novou databázi s názvem: registr a porovnání: utf8_general_ci.
Můžete si samozřejmě nastavit své jméno, ale pak jej nezapomeňte nahradit v souborech pro připojení k databázi (viz krok 1).

KROK 3.
Klikněte na vytvořenou databázi registrů a poté na horní záložku SQL a ve vstupním okně, které se objeví, vložte tento kód a klikněte na OK.

CREATE TABLE IF NOT EXISTS `my_users` (`id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `names` varchar(15) NOT NULL, `password` varchar(255) NOT NULL, `salt` varchar(100) NOT NULL, PRIMÁRNÍ KLÍČ (`id`)) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Vše! Přejděte v prohlížeči na svou adresu, zkoušejte a experimentujte.

Panel administrátora

Po dokončení alespoň jedné registrace můžete přejít do sekce ADMIN.
Přihlaste se do ADMIN PANELU:

Http://vase_stranky.ru/adminka/

Nezapomeňte tuto složku zabezpečit a můžete ji i přejmenovat.
Po otevření Admin Panelu klikněte na tlačítko HLEDAT a zobrazí se všichni registrovaní uživatelé, kde po kliknutí na konkrétní ID číslo uvidíte uživatelská data k editaci.

Uživatele můžete také rychle najít podle jeho e-mailu, stačí zadat známý e-mail do pole HLEDAT a kliknout na tlačítko.
Nedoporučuji používat tlačítko PŘIDAT, protože uživatel je přidán do systému bez hesla. A vůbec netuším, proč to udělali.

Toť vše, pokud to nevyjde nebo není jasné, ptejte se.


Zároveň můžete zkusit prodávat informace (produkty).

Existuje tedy úkol - provést registraci do systému a možnost autorizace. Jak to udělat? Začněme popořadě.

Registrace na php

Všechno je zde jednoduché. Pro uživatele se vytváří datový sklad. Obvykle se jedná o databázovou tabulku. Obsahuje pole jako id, uživatelské jméno a heslo. Zbývající pole jsou volitelná. Můžete shromažďovat e-maily uživatelů, jejich adresy, možné IP, čas přístupu do sítě, kódová slova z bankovních karet, bezpečnostní otázky...

Obecně platí, že hlavní je dvojice login-heslo.

První důležitý bod— Uživatelská hesla nelze uložit jako prostý text. Tedy jako text. Je to nemožné, protože pokud někdo jiný získá přístup k databázi, obdrží databázi uživatelských přihlašovacích hesel, která se mu pravděpodobně nebude líbit. A pokud vezmete v úvahu, že mnoho uživatelů má stejné přihlašovací jméno a heslo pro různé služby, ohrožuje to osobní údaje a finance, osobní korespondenci a vše ostatní.

Hesla musí být uložena jako hash. Hašování je operace, která přemění původní data na nějaký druh přetypování známé délky. To je dobře, protože obsazení je jedinečné. To znamená, že pokud ve zdrojových datech změníme alespoň jeden znak, bude výstup hašovací operace zcela jiný, k nepoznání. Operace hašování je nevratná, to znamená, že nebude možné rozšířit původní data z tohoto snímku. Tím se liší od šifrování.

MySQL a PHP mají stejnou společnou a bezpečnou hashovací funkci - md5. Tento algoritmus bere data a poskytuje otisk prstu.

Dostáváme tedy data od uživatele, kontrolujeme, zda nejsou prázdná, zda neobsahují znaky, které nepotřebujeme (uživatele příliš neomezujte). A nyní podáme žádost takto:

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

Všimněte si prosím, že jsem proměnné konkrétně pojmenoval $quoted_, protože před jejich vložením do dotazu je třeba je ukončit pomocí funkce mysql_real_escape_string(). Protože je tato funkce velmi často používaná a je napsána velmi dlouho (miluji PHP architekty), doporučuji ji nacpat do svého shellu. Například takto:

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

Autorizace v php

Přidali jsme nového uživatele a nyní je autorizován. Nakreslíme mu formulář pro přihlášení a heslo a zachytíme jeho data. co bude dál? Ostatně heslo jsme dostali v čistém textu a v databázi je hash hesla. Budu muset heslo převést na hash a pak je porovnat? Ne, můžete to udělat jednodušeji - v jedné žádosti.

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

Pokud dotaz vrátí řetězec, bude to řetězec s uživatelskými daty. Pokud ne, žádný takový uživatel v tabulce není. Uživatelská data pro nás budou velmi užitečná – vyplatí se je dostat do asociativního pole.

Zapamatovat uživatele

Nyní si musíme pamatovat, že uživatel má oprávnění a přesně vědět, kdo to je. První věc, která vás napadne, je použít k tomu soubory cookie. Ve skutečnosti vložte přihlašovací jméno a ID uživatele do souborů cookie a vždy víte, kdo stránku v tuto chvíli požaduje.

Ale to je špatná praxe. Proč? Protože cookie je soubor, který je uložen v prohlížeči uživatele a data z tohoto souboru jsou přenášena na server při každém požadavku. Za prvé, jsou přenášeny jako text, což znamená, že je lze snadno zachytit. Za druhé, toto je jednoduchý text odeslaný uživatelem. Proto se dá doslova přepsat. Pokud se například rozhodneme uložit přihlašovací jméno uživatele „Vasya“ do souborů cookie, může otevřít správu souborů cookie ve svém prohlížeči, najít požadovaný soubor cookie a změnit jej například na „Admin“. To je vše. Nyní s každou žádostí obdržíme soubor cookie, který nám sdělí uživatelské jméno uživatele - „Admin“.

Proto je bezpečnější ukládat veškerá data na serveru na místo nepřístupné z webu. V nějaké složce, ke které nelze získat přístup z prohlížeče. Všechna data o uživateli by měla být zapsána do této složky a čtena z ní pokaždé, když požaduje dokument. Chcete-li zjistit, který uživatel vlastní který datový soubor, musíte nazvat soubor jedinečným názvem a vhodit tento název do souborů cookie uživatele. Uživatel tedy nebude moci zjistit jméno souboru pro uživatele Admin - tento soubor je generován systémem na serveru. A to vám umožňuje přetahovat hesla v čistém textu z dokumentu do dokumentu.

To, co jsem popsal, je mechanismus relace. Například v Perlu, abyste mohli používat relace, musíte načíst moduly. A v PHP jsou relace podporovány ihned po vybalení. Ve skutečnosti vše, co potřebujete znát, je funkce session_start() a pole $_SESSION. To je vše. Teď vám to řeknu.

V každém skriptu, kde budete psát nebo číst z relace, potřebujete než vypíšete jakékoli informace zavolejte funkci session_start(). Tím zahájíte relaci. Tato funkce vytvoří soubor relace, pokud neexistuje, nebo jej přečte, pokud byl skriptu předán speciální soubor cookie.

Chcete-li zapsat data do relace, stačí je zapsat do pole $_SESSION. Nyní si musíme zapamatovat ID uživatele.

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

Vše. Nyní, pokaždé, když uživatel požádá o skript, který používá relace, bude vám k dispozici hodnota prvku $_SESSION["userid"].

Když tedy uživatel zadal své přihlašovací jméno a heslo, obdrželi jsme jeho údaje z databáze, což potvrzuje, že takový uživatel je v naší databázi, v relaci si ho pamatujeme.

Zjistěte, zda má uživatel oprávnění

No, je to snadné jako loupání hrušek! Nyní, když víte, jak relace fungují, je zjištění, zda je uživatel autorizován, otázkou jednoho řádku. Tady to je:

If(isset($_SESSION["ID uživatele"])) ( vytisknout "uživatel je oprávněn"; )

Pokud je v relaci definováno ID uživatele, pak již prošel autorizací. Jak ale můžete zjistit, o kterého uživatele se jedná? Jaké je jeho přihlášení? Datum narození? Kódové slovo pro bankovní kartu? Rodné jméno matky?

No, samozřejmě - proveďte jeden dotaz do tabulky uživatelů. Máme také ID tohoto uživatele.

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

Jak odhlásit uživatele a odhlásit se

No, je to docela jednoduché. Pokud zjistíme, zda je uživatel autorizován přítomností ID uživatele v relaci, pak jej odtud musíme odstranit, abychom ho mohli odhlásit. Dělá se to takto:

Unset($_SESSION["uživatelské jméno"]);

Pro jistotu můžete relaci také zabít. Tím vymažete cookie uživatele a zničíte soubor relace na serveru. V takovém případě z něj budou ztracena všechna data. Dělá se to takto:

Session_destroy();

To je vše. Máte-li jakékoli dotazy, neváhejte nás kontaktovat. Navíc mě můžete kontaktovat přes icq nebo mail a požádat o pomoc s něčím. Obvykle neodmítám. Pokud potřebujete seriózní pomoc, mohu požádat o malou platbu. Navíc vás mohu naučit, jak vytvářet webové stránky na dálku! Takový kouč a guru jsem já :) A pokud chcete dostávat lekce a triky jen tak, zdarma, přihlaste se k odběru RSS mého blogu.

Tento příspěvek je sponzorován ibooknet.ru, který nabízí opravy notebooků za rozumné ceny. Osobně je můj notebook v pořádku a doufám, že ho nebudu muset opravovat. To samé přeji i tobě.




Nahoru