Creëren van PHP-gebruikersregistratie en autorisatie. Het creëren van een eenvoudig gebruikersregistratiesysteem in PHP en MySQL

Nog niet zo lang geleden vroeg een van mijn bezoekers mij om er een artikel over te schrijven hoe u gebruikers op de site kunt registreren en autoriseren. Eigenlijk voldoe ik aan zijn verzoek, en in dit artikel zal ik vertellen hoe dit wordt gedaan.

Er zijn verschillende manieren het creëren van gebruikersregistratie en autorisatie, maar in dit artikel zal ik mijn favoriete analyseren - via het sessie- of cookiemechanisme.

Allereerst, als je wilt registreer op uw website, dan moet u begrijpen waar gebruikersgegevens worden opgeslagen. Kan worden opgeslagen in een gewoon tekstbestand, in XML-bestand, of in de database. De eerste twee opties zijn erg gevaarlijk, dus ik raad je af ze te gebruiken. En hier is de derde optie - het opslaan van gebruikersinformatie in een database- de meest populaire, en het is deze methode voor het opslaan van informatie die ik u adviseer te gebruiken.

We hebben de opslaglocatie bepaald. Laten we nu direct naar autorisatie algoritme:

  1. Maak een registratieformulier voor HTML.
  2. Ontvang gegevens van het formulier in het handlerscript.
  3. Controleer de ontvangen gegevens en als deze niet kloppen, ga dan terug naar het registratieformulier.
  4. Als de gegevens correct zijn, schrijft u deze naar de database.

Dat is het hele proces gebruikersregistratie op de site. Dat wil zeggen dat registratie informatie over de gebruiker op de site opslaat.

Het volgende punt is gebruikersautorisatie op de site Voordat ik verder ga, zal ik u echter over één belangrijk punt in het registratieformulier vertellen: het wachtwoord. Ik raad u ten zeerste aan wachtwoorden niet in leesbare tekst op te slaan (bijvoorbeeld: ' 123456 "). Zorg ervoor dat u ze codeert, in ieder geval met behulp van de functie md5(). En sla het gecodeerde wachtwoord op in de database.

Nu autorisatie. Het eerste dat u moet begrijpen, is dat autorisatie-informatie ergens moet worden opgeslagen. De eenvoudigste optie is om informatie op te slaan in een sessie (of in koekje). En nu het algoritme:

  1. Maak een gebruikersautorisatieformulier aan op HTML, waar de gebruiker zijn login en wachtwoord moet invoeren.
  2. Accepteer in het handlerscript gegevens van de gebruiker. Als je naar mij hebt geluisterd en gecodeerde wachtwoorden in een database hebt opgeslagen, codeer dan eerst het resulterende wachtwoord. Als er duidelijke wachtwoorden in de database staan, is het niet nodig deze te coderen.
  3. Controleer de juistheid van de ingevoerde gegevens en schrijf deze in als de login en het wachtwoord overeenkomen met de bestaande gebruiker in de database koekje of sessie-informatie met een login en een gecodeerd wachtwoord (of een open wachtwoord als u dit niet hebt gecodeerd).
  4. Als de login en/of het wachtwoord verkeerd zijn ingevoerd, ga dan terug naar het autorisatieformulier.

Nu heb je de nodige informatie over autorisatie van de gebruiker, die is opgeslagen in zijn koekje of op de server (indien sessie). In feite moet u deze informatie nu op elke pagina van de site controleren en op dezelfde manier verifiëren als het controleren van het autorisatieformulier. Dat wil zeggen, je leest van koekje(sessie) login en wachtwoord, en controleer deze. Als ze correct zijn, toon dan één pagina (voor geregistreerde gebruikers), en als ze onjuist zijn, laat dan een andere pagina zien (voor gasten).

En nog een laatste ding. Hoe de knop wordt gemaakt Uitgang"? Heel eenvoudig. Wanneer u op deze knop drukt, wordt de koekje, of sessie. De gebruiker wordt dus automatisch van de site verwijderd.

Zoals je kunt zien, is alles elementair, maar bij de implementatie van dit algoritme zul je zeker veel vragen hebben. Wat u bijvoorbeeld moet doen als u een gebruiker registreert wiens login al in de database staat. Uitvoering van diverse invoercontroles, uitvoering van bestaanscontrole e-mail enzovoort - dit is allemaal behoorlijk ingewikkeld als je het voor de eerste keer doet. Ik heb het sap echter weggegeven. Als je vragen hebt tijdens de implementatie, stel deze dan op het forum of in de reacties.

Iedereen die websites ontwikkelt, wordt vroeg of laat geconfronteerd met een dergelijke taak gebruikersautorisatie en authenticatie, nauwkeurig geïmplementeerd met behulp van een programmeertaal, en niet met behulp van de http-protocolstandaard. Vandaag zullen we kijken naar een voorbeeld van het maken van een eenvoudige autorisatie met behulp van de programmeertaal PHP, en we zullen gebruikersgegevens opslaan in de MySQL-database.

Onderstaande methode is eenvoudig of als het ware de basis voor het aanmaken van een normale autorisatie, maar u kunt er eenvoudig gebruik van maken, aangezien het best goed werkt, en u kunt deze methode ook zelf verbeteren en op uw website implementeren.

Deze werkwijze is gebaseerd op sessies, maar ik gebruik hier ook cookies zodat de browser de gebruiker onthoudt die de laatste keer heeft geauthenticeerd, zodat je niet elke keer de login hoeft in te voeren. Je kunt het wachtwoord uiteraard opslaan in cookies, maar dit is niet veilig, ook al is het gecodeerd. Om de sessie te beëindigen, sluit u eenvoudigweg de browser en opent u deze opnieuw.

Objecten maken in de database

Laten we verder gaan met oefenen. Laten we eerst een tabel maken voor het opslaan van gebruikersgegevens in de MySQL-database. Ik stel voor om een ​​eenvoudige tabelstructuur te gebruiken ( Je kunt het natuurlijk met iets aanvullen, mijn database heet test en de tabel is user):

MAAK TABEL test.users(user_id INT(11) UNSIGNED NOT NULL AUTO_INCREMENT, user_login VARCHAR(30) NOT NULL, user_password VARCHAR(32) NOT NULL, PRIMAIRE SLEUTEL (user_id)) ENGINE = MYISAM TEKENSET utf8 COLLATE utf8_general_ci;

En laten we meteen één item aan deze tabel toevoegen:

Voeg in test.users (user_login, user_password) waarden in ("mylogin","202cb962ac59075b964b07152d234b70")

In totaal kregen we:

  • Login– mijnlogin;
  • Wachtwoord -;

Uiteraard slaan wij het wachtwoord in gehashte vorm op, aangezien het opslaan van het wachtwoord in leesbare tekst op zijn zachtst gezegd niet veilig is. Onze bovenstaande wachtwoordhash is 123, dus als we het wachtwoord in het formulier invoeren, voeren we precies 123 in, en niet.

Het maken van een registratieformulier

Om de gebruiker zichzelf te laten registreren, maakt u een formulier waarvan de gegevens naar het registratieverwerkingsbestand worden verzonden, d.w.z. worden vastgelegd in de database. Dit is bijvoorbeeld de eenvoudigste manier:

0) ( $error = "Er is al een gebruiker met deze login"; ) // Zo niet, voeg dan een nieuwe gebruiker toe if(!isset($error)) ( $login = mysql_real_escape_string(trim(htmlspecialchars($_POST[ "login" ]))); // Verwijder spaties en hash het wachtwoord $password = md5(trim($_POST["password"])); user_password=" ".$password."""); echo "Je bent succesvol geregistreerd met de login - ".$login; exit(); // als er zo'n login is, praat er dan over echo $error; ) ) //standaard worden de gegevens naar hetzelfde afdrukbestand verzonden<<< html

Login
Wachtwoord
html;

?> Overigens kun je bij deze methode het beste Latijnse letters gebruiken voor het inloggen ( die. Engels ), als u een login in het Russisch wilt schrijven, moet u de code enigszins aanpassen. Je kunt het bestand een naam geven die je wilt ().

voor de test heb ik reg.html gebruikt Opmerking!

Het maken van een machtigingsformulier

"."Je bent ingelogd
Die. we hebben de sessie gecontroleerd en kunnen toegang tot bepaalde gegevens openen"; ) else ( $login = ""; //controleer de cookie, misschien is hij hier al geweest if (isset($_COOKIE["CookieMy"]))( $ login = htmlspecialchars( $_COOKIE["CookieMy"]); //eenvoudig formulier afdrukken<<< html

Login
Wachtwoord
html;

voor de test heb ik reg.html gebruikt ) ?>

Als uw php-parser plotseling weigert te werken, d.w.z. De php-code zelf wordt op je scherm weergegeven, dan heb je eenvoudigweg geen PHP-verwerking ingeschakeld in html-bestanden. Instellingen worden gemaakt in het webserverconfiguratiebestand httpd.conf (indien apache):

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

In IIS voegt u in het venster Moduletoewijzing toevoegen *.php toe aan *.html, gescheiden door komma's. Dit is als u het thuis op uw webserver doet, en als u dit allemaal bij de hoster doet, dan zult u hen moeten schrijven en hen moeten vragen de nodige wijzigingen aan te brengen. Sommige hosters hebben ze al aangebracht;

Ik heb commentaar gegeven op de code, dus ik denk dat alles duidelijk moet zijn. Laat me je er nogmaals aan herinneren dat je in alle bestanden waarvan je de inhoud niet aan ongeautoriseerde gebruikers wilt laten zien, session_start moet schrijven, en dat is waarschijnlijk alles. Als je vragen hebt, stel ze dan in de reacties. Succes! Van de auteur:

Vroeg of laat wordt elke webontwikkelaar geconfronteerd met de taak om de toegang tot een bepaalde pagina('s) of directory te beperken. Dit kan eenvoudigweg een geheime pagina op de site zijn, het administratieve gedeelte van de site of een ander gedeelte waartoe we de toegang willen beperken en alleen van een wachtwoord willen voorzien. Hiervoor kunt u uiteraard servertools gebruiken. Ik denk dat elke moderne hosting een functie heeft voor het beveiligen van een map met een wachtwoord, waar je een gebruiker kunt aanmaken, een wachtwoord aan hem kunt toewijzen en, na het beveiligen van de map met een wachtwoord, toegang tot de gesloten map alleen wordt verleend nadat je de juiste gegevens hebt ingevoerd login en wachtwoord. Maar soms wil je zelf iets schrijven, iets snels, simpels, maar tegelijkertijd betrouwbaars...

In deze les zullen we proberen ons eigen eenvoudige autorisatiesysteem te schrijven. We zullen een geheime pagina hebben - laten we zeggen dat het een beheerderspagina is, waartoe we alleen toegang zullen verlenen aan een geautoriseerde gebruiker. Ons autorisatiesysteem zal gebaseerd zijn op het sessiemechanisme. Voordat u doorgaat met deze les, raad ik u aan vertrouwd te raken met een van mijn eerdere lessen, waarin we in het bijzonder het werk van sessies beschouwen -.

Opening van de sessie. Op alle pagina's waar het werken met sessies wordt geïmpliceerd, moet de sessie worden gestart met behulp van de session_start() functie.

Sessievariabelen registreren.

Registratie van sessievariabelen ongedaan maken met behulp van de functie unset() en de sessie sluiten met behulp van de functie session_destroy().

Stap 1

Voor ons werk zullen we dus 3 bestanden aanmaken: Homepagina (index.php), Contacten (contact.php) en Beheerderspaneel (admin.php). Houd er rekening mee dat de bestandsextensie waartoe we de toegang beperken .php moet zijn. Zoals je al geraden had, zullen we de toegang tot het admin.php-bestand beperken. De code voor alle bestanden is het eenvoudigst: het is een soort menu op een rij met links naar andere pagina's, en daaronder de individuele tekst van elke pagina, zodat we ze van elkaar kunnen onderscheiden. Hier is bijvoorbeeld de code voor de indexpagina:

Thuis | Contacten | Beheerder


Dit is de hoofdpagina

De overige pagina's verschillen er, zoals ik al zei, alleen van in de tekst na de regeltag. Ik heb geen volwaardige pagina's met metatags gemaakt, omdat het onze taak alleen is om de toegang tot een bepaalde pagina te beperken.

Stap 2

Voorlopig kunnen we vrij door alle pagina's navigeren, inclusief de beheerderspagina. Hoe kunnen we de toegang ertoe beperken? Hoe zal het algoritme eruit zien? We gaan het volgende doen: helemaal aan het begin van de pagina controleren we of het label dat we nodig hebben in de sessie zit of, eenvoudiger gezegd, of een bepaalde sessievariabele bestaat (we kunnen ook controleren of de waarde van een sessievariabele gelijk is tot een bepaalde waarde). Als een dergelijke variabele niet bestaat, is de gebruiker die deze pagina opvraagt ​​niet geautoriseerd, wat betekent dat we hem doorsturen naar de autorisatiepagina, waar hem wordt gevraagd een formulier in te vullen met een naam en wachtwoord. Het algoritme is uiterst eenvoudig: laten we het implementeren. Ga naar het admin.php-bestand, open de PHP-constructie helemaal bovenaan en schrijf de volgende code:

sessie_start();

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

header("Locatie: enter.php");

Uitgang ;

Laten we nu deze code lezen. Ten eerste hebben we een sessie geopend, zoals u zich herinnert - dit is een vereiste bij het werken met sessies. Vervolgens hebben we een eenvoudige voorwaarde gemaakt die als volgt kan worden gelezen: "als het admin-element niet bestaat in de $_SESSION-array, zullen we het blok met acties uitvoeren dat tussen operatorhaakjes staat." En in het codeblok sturen we de gebruiker met behulp van de header()-functie door naar de enter.php-pagina (dit is de autorisatiepagina). Na de header() functie moeten we de uitvoering van het script voltooien met behulp van de exit() functie. Als niet aan de voorwaarde is voldaan, d.w.z. er zal een admin-element in de $_SESSION-array staan, dit betekent dat de gebruiker al succesvol is geautoriseerd, en we zullen het actieblok tussen operatorhaakjes overslaan, d.w.z. er zal geen omleiding plaatsvinden, en we tonen de gevraagde pagina.

Stap 3

Nu moeten we een inlogpagina maken - enter.php. Kopieer hiervoor de code van bijvoorbeeld de contact.php-pagina, maak een nieuw bestand en plak de gekopieerde code daarin. Sla het bestand op onder de naam enter.php. Nu zullen we op deze pagina een eenvoudig formulier schrijven voor het invoeren van uw gebruikersnaam en wachtwoord:

Thuis | Contacten | Beheerder


Dit is de inlogpagina.
Gebruikersnaam:
Wachtwoord:

< p > < a href = "index.php" >Thuis< / a > | < a href = "contact.php" >Contacten< / a > | < a href = "admin.php" >Beheerder< / a > < / p >

< hr / >

< br / >

< form method = "post" >

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

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

< input type = "submit" name = "submit" value = "Login" / >

< / form >

Alles is hier eenvoudig. Het formulier heeft 2 velden: een inlogveld (we noemden het “gebruiker”) en een wachtwoordveld (genaamd “pass”). We hebben ook een knop gemaakt (naam “verzenden”). Wanneer erop wordt geklikt, worden gegevens uit het formulier verzonden. De gegevens worden verzonden met behulp van de post-methode (we hebben dit gespecificeerd in het method-attribuut van de formuliertag) en worden op dezelfde pagina verwerkt. Nu kunnen we proberen naar de beheerderspagina te gaan. Als alles foutloos verloopt, komen we daar niet, maar komen we steevast op de autorisatiepagina terecht.

Verbazingwekkend!

Stap 4

Vervolgens moeten we een handler op de pagina met het formulier schrijven die gegevens van het formulier ontvangt en vergelijken of de login en het wachtwoord van het formulier overeenkomen met de gegevens die we hebben. Om dit te doen, opent u de PHP-constructie bovenaan de inlogpagina en begint u met het schrijven van code. Eerst moeten we een sessie openen - hier zullen we immers een label in de sessie aanmaken als we de juiste login en wachtwoord hebben ontvangen. Op dezelfde pagina slaan we de login en het wachtwoord van de beheerder op. Meestal worden deze gegevens opgeslagen in een database (DB), maar we hebben maar 1 gebruiker (beheerder), en daarom is het opslaan van zijn gegevens om in te loggen in de DB niet geheel rationeel. Als er meer dan één gebruiker is, d.w.z. we schrijven bijvoorbeeld een project waarin registratie plaatsvindt, dan zal het in dit geval natuurlijk moeilijk zijn om zonder een database te doen.

Onze login zal dus “admin” zijn en we zullen deze opslaan in de $admin variabele. Het wachtwoord is “mypass” en wordt opgeslagen in de $pass-variabele. Maar het opslaan van wachtwoorden in leesbare tekst wordt niet geaccepteerd - dit is in strijd met de beveiligingsprincipes. We slaan het wachtwoord in gecodeerde vorm op en de functie md5() helpt ons het te coderen. Deze functie codeert een string met behulp van een speciaal algoritme, en de uitvoer is een string van 32 tekens (een zogenaamde hash). Als we de string “mypass” coderen (dit kan bijvoorbeeld in het contact.php-bestand):

echo md5 ("mijnpass");

dan zal de uitvoer de regel "a029d0df84eb5549c641e04a9ef389e5" zijn - dit zal ons gecodeerde wachtwoord zijn. Voorlopig ziet de code van de inlogpagina er als volgt uit:

Thuis | Contacten | Beheerder


Dit is de inlogpagina.
Gebruikersnaam:
Wachtwoord:

sessie_start();

$beheerder = "beheerder" ;

$pas = "a029d0df84eb5549c641e04a9ef389e5";

< p > < a href = "index.php" >Thuis< / a > | < a href = "contact.php" >Contacten< / a > | < a href = "admin.php" >Beheerder< / a > < / p >

< hr / >

< br / >

< form method = "post" >

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

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

< input type = "submit" name = "submit" value = "Login" / >

< / form >

Stap 5

Laten we nu eens kijken wat we van het formulier hebben ontvangen met wat we hebben in de login- en wachtwoordvariabelen. We zullen dit voorwaardelijk doen - alleen als de formulierknop wordt ingedrukt. Hoe kunnen we dit controleren? De knop heeft een naam (“verzenden”) en we verzenden gegevens via de postmethode. Dienovereenkomstig kunnen we eenvoudig controleren of het submission-element bestaat in de $_POST-array. Als dit het geval is, is op de knop gedrukt en zullen we acties uitvoeren om de verzonden gegevens te verifiëren, anders zullen we niets doen. Nadat we de login en het wachtwoord hebben opgegeven, schrijven we de voorwaarde:

if($_POST["submit"])( if($admin == $_POST["gebruiker"] AND $pass == md5($_POST["pass"]))( $_SESSION["admin"] = $ admin; header("Locatie: admin.php");

Login of wachtwoord is onjuist!

"; }

if ($_POST["verzenden"]) (

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

$_SESSION["beheerder"] = $beheerder;

Uitgang ;

) anders echo "

Login of wachtwoord is onjuist!

" ;

We hebben de voorwaarde voor het controleren van de login en het wachtwoord dubbel gesteld. Dit gebeurt met behulp van de logische operator AND (deze kan ook op deze manier worden geschreven - “&&”). De voorwaarde kan als volgt worden gelezen: “if (de $admin variabele is gelijk aan het user element in de $_POST array EN de $pass variabele is gelijk aan de hash van het pass element in de $_POST array) dan (we voeren het blok met acties), anders geven we de tekst 'Login of wachtwoord is onjuist!'

Als het login-wachtwoord-paar overeenkomt, registreren we de sessievariabele $_SESSION["admin"] en sturen we de gebruiker door naar de beheerderspagina - admin.php.
Laten we nu proberen te testen wat we al hebben gemaakt. Als we opzettelijk een valse login en wachtwoord invoeren, ontvangen we een waarschuwingsbericht dat “Login of wachtwoord onjuist is!” Laten we nu proberen de juiste inloggegevens in te voeren. Als we nergens een fout hebben gemaakt, bevinden we ons na het klikken op de knop "Inloggen" op de beheerderspagina.

Stap 6

Nu hoeven we alleen nog wat kleine details toe te voegen. We zijn nu bijvoorbeeld geautoriseerd in het systeem, maar als we het adres van de autorisatiepagina in de adresbalk invoeren, komen we er gemakkelijk bij en zien we het autorisatieformulier. Dit mag niet gebeuren; alleen een ongeautoriseerde gebruiker mag het formulier zien. Hoe kunnen we dit oplossen? Onthoud dat we op de admin.php-pagina hebben gecontroleerd of het label in de sessie zat. Als deze er niet is, hebben we de gebruiker doorgestuurd naar de autorisatiepagina. Hier kunnen we hetzelfde doen, alleen dan in omgekeerde volgorde. Dat wil zeggen, we controleren ook of het label in de sessie zit. Pas nu zullen we de gebruiker naar de beheerderspagina overbrengen als er een dergelijk label is. Dit is in principe logisch. Als er een label is, is de gebruiker al geautoriseerd en kunnen we hem overbrengen naar de beheerderspagina. Voeg op de enter.php-pagina nadat de sessie is gestart de volgende code toe:

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

if ($_SESSION["beheerder"]) (

header ("Locatie: admin.php" );

Uitgang ;

Als een geautoriseerde gebruiker nu de naam van de autorisatiepagina in de adresbalk probeert in te voeren, wordt hij doorgestuurd naar de beheerderspagina. Een ongeautoriseerde gebruiker heeft vrije toegang tot de autorisatiepagina.

Stap 7

Het volgende punt dat we moeten bieden is de implementatie van het uitloggen van een geautoriseerde gebruiker, dat wil zeggen, laten we zeggen dat de beheerder zijn werk heeft voltooid en moet uitloggen zodat niemand anders onder zijn account kan werken. Om dit te doen, voegt u een “Exit”-link toe aan de admin.php-pagina. De link leidt naar dezelfde pagina, alleen de parameter die we nodig hebben, wordt eraan toegevoegd. De parameter wordt toegevoegd met behulp van een vraagteken:

Uitgang

< a href = "admin.php?do=logout" >Uitgang< / a >

Deze link kunt u plaatsen op de plek waar wij hem nodig hebben - ik plaats hem na de paginatekst. Wat de parameter betreft, deze wordt verzonden met behulp van de GET-methode (onthoud dat we gegevens uit het formulier hebben verzonden met behulp van de tweede parameter - POST). Bij gebruik van deze methode worden de gegevens aan het adres in de adresbalk toegevoegd en door slechts een vraagteken van het adres gescheiden. We geven één parameter door - do - en wijzen deze tegelijkertijd de waarde "logout" toe. Hoe kunnen we de gebruiker nu autoriseren? Het is heel eenvoudig: de tweede en derde fase zullen ons hierbij helpen bij het werken met sessies. Wanneer de pagina wordt geladen, kunnen we de waarde van het do-element uit de $_GET-array controleren. Als deze gelijk is aan de string “logout”, zullen we eenvoudigweg de sessievariabele $_SESSION["admin"] uitschrijven en de sessie vernietigen. Dienovereenkomstig zal er geen label aanwezig zijn in de sessie hierna, en in het volgende blok, waar we controleren op de aanwezigheid van het label, wordt de gebruiker doorgestuurd naar de autorisatiepagina. Het is eenvoudig.

Hallo allemaal. We hebben dus een paar elementen geleerd om vormen te creëren. Het is tijd om onze kennis te combineren om een ​​groter probleem op te lossen. Laten we het eenvoudigste autorisatieformulier op de site maken. Om dit te doen, hebben we twee velden nodig, we maken er handtekeningen aan en voegen er handtekeningen aan toe.

Het eerste veld is voor de login, het tweede is voor het wachtwoord. En bij de tweede is het niet zo eenvoudig. Omdat het op dit moment slechts een tekstinvoerveld is.

Resultaat in browser:

Om ervoor te zorgen dat de tekst die erin wordt ingevoerd, wordt vervangen door sterretjes, zoals gebruikelijk is voor een veld van dit type, moet u één eenvoudige handeling uitvoeren. Namelijk om de attribuutwaarde te vervangen type op wachtwoord:

Resultaat:

Knop voor het verzenden van formulieren

Alsjeblieft. Ons formulier is bijna klaar. Om de creatie ervan te voltooien, moet u nu een knop maken die zal worden gebruikt om het formulier in te dienen. Het probleem wordt opgelost met behulp van een tag met soort indienen.

Als de knop een soort inscriptie moet hebben, dan kan dit worden gedaan met behulp van het attribuut waarde. Het is aan jou om al dan niet een naam aan de knop toe te wijzen; als je dit doet, ontvangt de server deze naam, evenals de waarde van de knop.

In de regel is de naam van een formulierverzendknop nodig als het formulier meerdere knoppen heeft, die elk een specifieke actie uitvoeren. Dankzij dit begrijpt de server, die de naam en waarde van de knop van de browser ontvangt, op welke knop de gebruiker heeft geklikt en wat er dienovereenkomstig moet gebeuren.

Als gevolg hiervan is de code voor ons formulier als volgt:

Resultaat in browser:

Er is dus een taak: registratie in het systeem en de mogelijkheid van autorisatie. Hoe dit te doen? Laten we op volgorde beginnen.

Registratie op php

Alles is hier eenvoudig. Er wordt een datawarehouse gecreëerd voor gebruikers. Meestal is dit een databasetabel. Het bevat velden zoals ID, gebruikersnaam en wachtwoord. De overige velden zijn optioneel. U kunt de e-mails van gebruikers verzamelen, hun adressen, mogelijke IP's, het tijdstip van toegang tot het netwerk, codewoorden van bankkaarten, beveiligingsvragen...

Over het algemeen is het belangrijkste het login-wachtwoordpaar.

Eerste belangrijk punt— Gebruikerswachtwoorden kunnen niet in leesbare tekst worden opgeslagen. Dat wil zeggen, zoals tekst. Dat is onmogelijk, want als iemand anders toegang krijgt tot de database, krijgt hij een database met inlogwachtwoorden van gebruikers, wat hem waarschijnlijk niet bevalt. En als je bedenkt dat veel gebruikers dezelfde login en hetzelfde wachtwoord hebben op verschillende diensten, brengt dit persoonlijke gegevens en financiën, persoonlijke correspondentie en al het andere in gevaar.

Wachtwoorden moeten als hash worden opgeslagen. Hashing is een bewerking die de originele gegevens omzet in een soort cast met een bekende lengte. Dit is goed omdat de cast uniek is. Dat wil zeggen: als we ten minste één teken in de brongegevens wijzigen, zal de uitvoer van de hash-bewerking totaal anders zijn, onherkenbaar. De hash-bewerking is onomkeerbaar, dat wil zeggen dat het niet mogelijk zal zijn om de oorspronkelijke gegevens uit deze momentopname uit te breiden. Dit is hoe het verschilt van encryptie.

MySQL en PHP hebben dezelfde gemeenschappelijke en veilige hashfunctie: md5. Dit algoritme neemt gegevens en geeft een vingerafdruk.

We ontvangen dus gegevens van de gebruiker, controleren of deze leeg is en of deze geen tekens bevat die we niet nodig hebben (beperk het aantal gebruikers niet te veel). En nu doen we een verzoek als dit:

INSERT INTO `users` (`id`,`gebruikersnaam`,`wachtwoord`) VALUES("",$quoted_username,MD5($quoted_password));

Houd er rekening mee dat ik de variabelen specifiek $quoted_ heb genoemd, omdat ze, voordat ze in de query worden ingevoegd, moeten worden geëscaped met behulp van de functie mysql_real_escape_string(). Omdat deze functie heel vaak wordt gebruikt en erg lang is geschreven (ik ben dol op PHP-architecten), raad ik aan om deze in je shell te proppen. Bijvoorbeeld zoals dit:

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

Autorisatie in php

We hebben een nieuwe gebruiker toegevoegd en hij is nu geautoriseerd. We tekenen een login-wachtwoordformulier voor hem en vangen zijn gegevens op. Wat is het volgende? Wij hebben het wachtwoord immers in leesbare tekst ontvangen en in de database staat een hash van het wachtwoord. Moet ik het wachtwoord omzetten in een hash en deze vervolgens vergelijken? Nee, het kan eenvoudiger – in één verzoek.

SELECTEER * VAN `gebruikers` WAAR `login`=$qoted_login EN `password`=MD5($quoted_password);

Als de query een tekenreeks retourneert, is dit een tekenreeks met gebruikersgegevens. Als dit niet het geval is, is er geen dergelijke gebruiker in de tabel. De gebruikersgegevens zullen erg nuttig voor ons zijn - het is de moeite waard om ze in een associatieve array te plaatsen.

Gebruiker onthouden

Nu moeten we onthouden dat de gebruiker geautoriseerd is en precies weet wie hij is. Het eerste dat in je opkomt is het gebruik van cookies hiervoor. Plaats de login en ID van de gebruiker in cookies en weet altijd wie de pagina op dat moment opvraagt.

Maar dit is een slechte gewoonte. Waarom? Omdat een cookie een bestand is dat in de browser van de gebruiker wordt opgeslagen en bij elk verzoek gegevens uit dit bestand naar de server worden verzonden. Ten eerste worden ze als tekst verzonden, waardoor ze gemakkelijk te onderscheppen zijn. Ten tweede is dit een eenvoudige tekst die door de gebruiker wordt verzonden. Daarom kan het letterlijk herschreven worden. Als we bijvoorbeeld besluiten om de gebruikersnaam “Vasya” in cookies op te slaan, kan hij het cookiebeheer in zijn browser openen, de gewenste cookie zoeken en deze wijzigen in bijvoorbeeld “Admin”. Dat is alles. Nu ontvangen we bij elk verzoek een cookie, die ons de gebruikersnaam van de gebruiker vertelt: “Admin”.

Daarom is het veiliger om alle gegevens op de server op te slaan op een plaats die niet toegankelijk is vanaf internet. In een map die niet toegankelijk is vanuit de browser. Alle gegevens over de gebruiker moeten naar deze map worden geschreven en van daaruit worden gelezen telkens wanneer hij een document opvraagt. Om erachter te komen welke gebruiker welk gegevensbestand bezit, moet u het bestand een unieke naam geven en deze naam in de cookies van de gebruiker plaatsen. De gebruiker kan dus de naam van het bestand voor de beheerdergebruiker niet achterhalen - dit bestand wordt door het systeem op de server gegenereerd. En hierdoor kunt u wachtwoorden in leesbare tekst van document naar document slepen.

Wat ik heb beschreven is sessie mechanisme. Als u in Perl bijvoorbeeld sessies wilt gebruiken, moet u modules laden. En in PHP worden sessies standaard ondersteund. In feite is het enige dat u hoeft te weten de functie session_start() en de array $_SESSION. Dit is alles. Ik zal het je nu vertellen.

In elk script waar je naar schrijft of leest vanuit een sessie, heb je dit nodig voordat u enige informatie uitvoert roep de functie session_start() aan. Hiermee wordt de sessie gestart. Deze functie maakt een sessiebestand aan als het niet bestaat, of leest het als er een speciale cookie aan het script is doorgegeven.

Om gegevens naar een sessie te schrijven, hoeft u deze alleen maar naar de array $_SESSION te schrijven. Nu moeten we de gebruikers-ID onthouden.

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

Alle. Elke keer dat een gebruiker een script aanvraagt ​​dat sessies gebruikt, is de waarde van het element $_SESSION["userid"] voor u beschikbaar.

Daarom ontvingen we, toen de gebruiker zijn login en wachtwoord invoerde, zijn gegevens uit de database, wat bevestigt dat een dergelijke gebruiker in onze database staat, we onthouden hem in de sessie.

Ontdek of de gebruiker geautoriseerd is

Nou ja, het is net zo eenvoudig als het pellen van peren! Nu u weet hoe sessies werken, kunt u in één regel achterhalen of een gebruiker geautoriseerd is. Hier is het:

If(isset($_SESSION["userid"])) ( print "gebruiker is geautoriseerd"; )

Als er in de sessie een gebruikers-ID is gedefinieerd, is de autorisatie al geslaagd. Maar hoe kom je erachter welke gebruiker het is? Wat is zijn login? Geboortedatum? Codewoord voor een bankkaart? Meisjesnaam van moeder?

Nou ja, uiteraard: voer één query uit in de gebruikerstabel. We hebben ook de ID van deze gebruiker.

SELECTEER * VAN `gebruikers` WAAR `id`=$quoted_userid

Hoe u een gebruiker uitlogt en uitlogt

Nou, het is heel simpel. Als we vaststellen of een gebruiker geautoriseerd is door de aanwezigheid van een userid in de sessie, moeten we hem daar verwijderen om hem uit te loggen. Het is als volgt gedaan:

Uitgezet($_SESSION["user-ID"]);

Voor de zekerheid kun je de sessie ook beëindigen. Hierdoor wordt de cookie van de gebruiker gewist en wordt het sessiebestand op de server vernietigd. In dit geval gaan alle gegevens verloren. Het is als volgt gedaan:

Sessie_destroy();

Dat is alles. Als u vragen heeft, aarzel dan niet om contact met ons op te nemen. Bovendien kun je via icq of mail contact met mij opnemen en ergens hulp bij vragen. Meestal weiger ik niet. Als je serieuze hulp nodig hebt, kan ik een kleine vergoeding vragen. Daarnaast kan ik je leren hoe je op afstand websites kunt maken! Dit is het soort coach en goeroe dat ik ben :) En als je zomaar lessen en trucs wilt ontvangen, abonneer je dan op de RSS van mijn blog.

Dit bericht wordt gesponsord door ibooknet.ru, dat laptopreparaties tegen redelijke prijzen aanbiedt. Persoonlijk is mijn laptop in orde en ik hoop dat ik hem niet hoef te repareren. Ik wens hetzelfde voor jou.