Valmis PHP-valtuutuslomake. Uskomattoman yksinkertaisen rekisteröintijärjestelmän rakentaminen PHP:ssä ja MySQL:ssä

Ohjaan huomioillesi erittäin yksinkertaisen ja toimivan skriptin rekisteröintiä ja valtuutusta varten sivustolla, joka koostuu 3 PHP-tiedostosta, joissa on yhteys 2 Java-skriptiin, joiden avulla virheet näytetään itse lomakkeessa lataamatta sivua uudelleen.

Skripti on testattu onnistuneesti PHP 5.3.3:lla ja PHP 5.6.3:lla

Mitä käsikirjoitus voi tehdä ja mitä sillä on

  • Rekisteröi uusia käyttäjiä;
  • Valtuuta käyttäjiä ja tallenna evästeitä tietyksi ajaksi (ei tarvitse kirjautua sisään joka kerta);
  • Näytä ja piilota tietyt tiedot valtuutetuille ja luvattomille käyttäjille;
  • Siinä on HALLINTOPANEELI, jossa voit muokata kaikkia tietoja ja poistaa käyttäjiä.

DEMO- ja hallintapaneelit ovat myös siellä

VAIHE 1.
Jos käytät paikallista rekisteröinti- ja valtuutuskomentosarjaa DENWER:n avulla, sinun ei tarvitse tehdä muutoksia tiedostoihin muodostaaksesi yhteyden tietokantaan.
Muussa tapauksessa avaa tiedostot stayt.php, classes/Auth.class.php ja adminka/connect.php ja korvaa aivan ylhäällä tietokantayhteyden tiedot omallasi.

VAIHE 2.
Mene (jos käytät DENWERiä) osoitteeseen: http://localhost/Tools/phpmyadmin/, jos käytössäsi on isännöinti, napsauta Tietokannat ja luo uusi tietokanta, jonka nimi on rekisteri ja vertailu: utf8_general_ci.
Voit tietysti asettaa nimesi, mutta muista sitten korvata se tiedostoissa muodostaaksesi yhteyden tietokantaan (katso vaihe 1).

VAIHE 3.
Napsauta luotua rekisteritietokantaa ja sitten ylimmässä SQL-välilehdessä ja liitä tämä koodi näkyviin tulevaan syöttöikkunaan ja napsauta OK.

LUO TAULUKO, JOS EI OLE OLEMASSA `my_users` (`id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL, `names` varchar(15) NOT NULL, `salasana` varchar(255) NOT NULL `salt` varchar(100) EI NULL, ENSISIJAINEN AVAIN (`id`)) ENGINE=MyISAM OLETUSMERKKI=utf8;

Kaikki! Mene osoitteeseesi selaimessa, kokeile ja kokeile.

Hallintapaneeli

Kun olet suorittanut vähintään yhden rekisteröinnin, voit siirtyä JÄRJESTELMÄNVALVOJA-osioon.
Kirjaudu HALLINTAPANEELIIN:

Http://your_site.ru/adminka/

Älä unohda suojata tätä kansiota ja voit myös nimetä sen uudelleen.
Kun avaat Admin Panelin, klikkaa HAKU-painiketta ja kaikki rekisteröityneet käyttäjät tulevat näkyviin, missä klikatessasi tiettyä ID-numeroa näet käyttäjätiedot muokattavaksi.

Voit myös löytää käyttäjän nopeasti hänen sähköpostillaan tehdäksesi tämän kirjoittamalla tunnetun sähköpostiosoitteen HAKU-kenttään ja napsauttamalla painiketta.
En suosittele ADD-painikkeen käyttöä, koska käyttäjä lisätään järjestelmään ilman salasanaa. Ja minulla ei ole aavistustakaan, miksi he edes tekivät sen.

Siinä kaikki, jos se ei toimi tai on epäselvä, esitä kysymyksiä.


Matkan varrella voit yrittää myydä tietoa (tuotteita).

Joten on tehtävä - tehdä rekisteröinti järjestelmään ja mahdollisuus valtuuttaa. Miten tämä tehdään? Aloitetaan järjestyksessä.

Rekisteröityminen php:ssä

Täällä kaikki on yksinkertaista. Käyttäjiä varten luodaan tietovarasto. Tyypillisesti tämä on tietokantataulukko. Se sisältää kentät, kuten id, käyttäjätunnus ja salasana. Loput kentät ovat valinnaisia. Voit kerätä käyttäjien sähköpostit, osoitteet, mahdolliset IP:t, verkkoon pääsyn ajan, pankkikorttien koodisanoja, turvakysymyksiä...

Yleensä tärkein asia on kirjautumissalasana-pari.

Ensimmäinen tärkeä seikka on, että käyttäjien salasanoja ei voi tallentaa selkeänä tekstinä. Eli kuin tekstiä. Se on mahdotonta, koska jos joku muu pääsee tietokantaan, hän saa tietokannan käyttäjien kirjautumissalasanoista, joista he eivät todennäköisesti pidä. Ja jos ajattelee, että monilla käyttäjillä on sama käyttäjätunnus ja salasana eri palveluissa, tämä vaarantaa henkilötiedot ja talouden, henkilökohtaisen kirjeenvaihdon ja kaiken muun.

Salasanat on tallennettava hashina. Hashing on toiminto, joka muuttaa alkuperäiset tiedot jonkinlaiseksi tunnetun pituiseksi tilannekuvaksi. Tämä on hyvä, koska näyttelijät ovat ainutlaatuisia. Eli jos muutamme ainakin yhtä merkkiä lähdetiedoissa, hajautustoiminnon tulos tulee täysin erilainen, tunnistamatta. Hajautustoiminto on peruuttamaton, eli alkuperäistä dataa ei ole mahdollista laajentaa tästä tilannekuvasta. Näin se eroaa salauksesta.

MySQL:llä ja PHP:llä on sama yhteinen ja turvallinen hajautustoiminto - md5. Tämä algoritmi ottaa tietoja ja antaa sormenjäljen.

Vastaanotamme siis käyttäjältä dataa, tarkistamme onko se tyhjä tai sisältääkö tarpeettomia merkkejä (älä rajoita käyttäjiä liikaa). Ja nyt teemme seuraavanlaisen pyynnön:

INSERT INTO `users` (`id`,`käyttäjänimi`,`salasana`) VALUES("",$lainattu_käyttäjänimi,MD5($lainattu_salasana));

Huomaa, että annoin nimenomaisesti muuttujat $quoted_, koska ennen niiden lisäämistä kyselyyn ne on pakotettava käyttämällä mysql_real_escape_string()-funktiota. Koska tätä toimintoa käytetään hyvin usein ja se on kirjoitettu hyvin pitkäksi (rakastan PHP-arkkitehteja), suosittelen sen ahtautumista kuoreen. Esimerkiksi näin:

Funktio lainaus($var) ( return mysql_real_escape_string($var); )

Valtuutus php:ssä

Olemme lisänneet uuden käyttäjän ja nyt hän on valtuutettu. Piirrämme hänelle kirjautumissalasanalomakkeen ja saamme hänen tiedot. Mitä seuraavaksi? Loppujen lopuksi saimme salasanan selkeänä tekstinä, ja tietokannassa on salasanan hash. Pitääkö minun muuntaa salasana hashiksi ja sitten vertailla niitä? Ei, voit tehdä sen yksinkertaisemmin - yhdellä pyynnöstä.

SELECT * FROM `käyttäjät` WHERE `login`=$login_login AND `salasana`=MD5($quoted_password);

Jos kysely palauttaa merkkijonon, se on merkkijono, joka sisältää käyttäjätietoja. Jos ei, taulukossa ei ole tällaista käyttäjää. Käyttäjätiedoista on meille paljon hyötyä - se kannattaa saada assosiatiiviseen taulukkoon.

Muista käyttäjä

Nyt meidän on muistettava, että käyttäjä on valtuutettu ja tietää tarkalleen, kuka se on. Ensimmäinen asia, joka tulee mieleen, on käyttää evästeitä tähän. Laita todellakin käyttäjän kirjautumistunnus ja tunnus evästeisiin ja tiedä aina, kuka sivua sillä hetkellä pyytää.

Mutta tämä on huono käytäntö. Miksi? Koska eväste on tiedosto, joka on tallennettu käyttäjän selaimeen ja tämän tiedoston tiedot välitetään palvelimelle jokaisessa pyynnössä. Ensinnäkin ne lähetetään tekstinä, mikä tarkoittaa, että ne on helppo siepata. Toiseksi tämä on yksinkertaista käyttäjän lähettämää tekstiä. Siksi se voidaan kirjaimellisesti kirjoittaa uudelleen. Jos esimerkiksi päätämme tallentaa käyttäjätunnuksen "Vasya" evästeisiin, hän voi avata evästehallinnan selaimessaan, löytää halutun evästeen ja muuttaa sen esimerkiksi "Admin". Siinä kaikki. Nyt jokaisen pyynnön yhteydessä saamme evästeen, joka kertoo meille käyttäjän käyttäjänimen - "Admin".

Siksi on turvallisempaa tallentaa kaikki tiedot palvelimelle paikkaan, johon ei pääse verkosta. Jossain kansiossa, johon ei pääse selaimesta. Kaikki käyttäjää koskevat tiedot tulee kirjoittaa tähän kansioon ja lukea sieltä aina, kun hän pyytää dokumenttia. Saadaksesi selville, kuka käyttäjä omistaa minkäkin datatiedoston, sinun on kutsuttava tiedosto yksilölliseksi nimeksi ja heitettava tämä nimi käyttäjän evästeisiin. Näin ollen käyttäjä ei voi saada selville järjestelmänvalvojan tiedoston nimeä - tämän tiedoston luo järjestelmä palvelimella. Tämän avulla voit vetää salasanoja selkeänä tekstinä asiakirjasta toiseen.

Kuvasin istuntomekanismia. Esimerkiksi Perlissä istuntoja varten sinun on ladattava moduuleja. Ja PHP-istuntoja tuetaan alusta alkaen. Itse asiassa sinun tarvitsee vain tietää session_start()-funktio ja $_SESSION-taulukko. Tämä on kaikki. Kerron sinulle nyt.

Jokaisessa skriptissä, jossa kirjoitat istuntoon tai luet siitä, sinun on kutsuttava session_start()-funktio ennen tietojen tulostamista. Tämä aloittaa istunnon. Tämä toiminto luo istuntotiedoston, jos sitä ei ole olemassa, tai lukee sen, jos komentosarjalle on välitetty erityinen eväste.

Jos haluat kirjoittaa tietoja istuntoon, sinun on yksinkertaisesti kirjoitettava se $_SESSION-taulukkoon. Nyt meidän on muistettava käyttäjätunnus.

$_SESSION["käyttäjätunnus"] = $käyttäjätiedot["id"];

Kaikki. Nyt aina, kun käyttäjä pyytää istuntoja käyttävää komentosarjaa, $_SESSION["userid"]-elementin arvo on käytettävissäsi.

Siksi, kun käyttäjä syötti käyttäjätunnuksensa ja salasanansa, saimme hänen tietonsa tietokannasta, mikä vahvistaa, että tällainen käyttäjä on tietokannassamme, muistamme hänet istunnossa.

Selvitä, onko käyttäjä valtuutettu

No, se on yhtä helppoa kuin päärynöiden kuoriminen! Nyt kun tiedät, kuinka istunnot toimivat, on yhden rivin asia selvittää, onko käyttäjä valtuutettu. Tässä se on:

If(isset($_SESSION["käyttäjätunnus"])) (tulosta "käyttäjä on valtuutettu"; )

Jos istunnossa on määritetty käyttäjätunnus, hän on jo läpäissyt valtuutuksen. Mutta kuinka voit selvittää, mikä käyttäjä se on? Mikä on hänen kirjautumisensa? Syntymäaika? Pankkikortin koodisana? Äidin tyttönimi?

No, tietysti - tee yksi kysely käyttäjätaulukkoon. Meillä on myös tämän käyttäjän tunnus.

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

Kuinka kirjautua ulos käyttäjästä ja ulos

No se on aika yksinkertaista. Jos määritämme, onko käyttäjä valtuutettu käyttäjätunnuksen läsnäolon perusteella istunnossa, meidän on poistettava hänet sieltä, jotta voimme kirjautua ulos. Se on tehty näin:

Unset($_SESSION["käyttäjätunnus"]);

Voit myös lopettaa istunnon varmuuden vuoksi. Tämä tyhjentää käyttäjän evästeen ja tuhoaa istuntotiedoston palvelimella. Tässä tapauksessa kaikki tiedot menetetään siitä. Se on tehty näin:

Session_detroy();

Siinä kaikki. Jos sinulla on kysyttävää, älä epäröi ottaa meihin yhteyttä. Lisäksi voit ottaa minuun yhteyttä icq:n tai postin kautta ja pyytää apua johonkin. En yleensä kieltäydy. Jos tarvitset vakavaa apua, voin pyytää pientä maksua. Lisäksi voin opettaa nettisivujen tekemisen etänä! Sellainen valmentaja ja guru minä olen :) Ja jos haluat saada oppitunteja ja temppuja juuri sellaisina, ilmaiseksi, tilaa blogini RSS.

Tätä viestiä sponsoroi ibooknet.ru, joka tarjoaa kannettavien tietokoneiden korjauksia kohtuulliseen hintaan. Henkilökohtaisesti kannettavani on kunnossa, ja toivon, että minun ei tarvitse korjata sitä. Samaa toivon sinulle.

Reg.ru: verkkotunnukset ja hosting

Venäjän suurin rekisterinpitäjä ja hosting-palvelujen tarjoaja.

Yli 2 miljoonaa verkkotunnusta käytössä.

Promootio, verkkotunnuksen sähköposti, yritysratkaisut.

Yli 700 tuhatta asiakasta ympäri maailmaa on jo tehnyt valintansa.

*Keskeytä vieritys viemällä hiiri päälle.

Takaisin Eteen

Yksinkertaisen käyttäjärekisteröintijärjestelmän luominen PHP:ssä ja MySQL:ssä

Rekisteröintijärjestelmän luominen on paljon työtä. Sinun on kirjoitettava koodi, joka vahvistaa sähköpostiosoitteet, lähettää rekisteröinnin vahvistavan sähköpostin ja vahvistaa myös muut lomakekentät ja paljon muuta.

Ja vaikka olet kirjoittanut tämän kaiken, käyttäjät ovat haluttomia rekisteröitymään, koska... tämä vaatii heiltä ponnistelua.

Tässä opetusohjelmassa luomme hyvin yksinkertaisen rekisteröintijärjestelmän, joka ei vaadi tai tallenna salasanoja ollenkaan! Tulosta on helppo muokata ja lisätä olemassa olevaan PHP-sivustoon. Haluatko tietää, miten se toimii? Lue alla.



Super yksinkertainen järjestelmämme toimii näin:

Yhdistämme valtuutuslomakkeen ja ilmoittautumisen. Tässä lomakkeessa on kenttä sähköpostiosoitteesi syöttämistä varten ja rekisteröintipainike;
- Kun täytät kenttää sähköpostiosoitteella, rekisteröintipainiketta painamalla luodaan tietue uudesta käyttäjästä, mutta vain, jos syötettyä sähköpostiosoitetta ei löydy tietokannasta.

Tämän jälkeen luodaan satunnainen yksilöllinen merkkijoukko (tunnus), joka lähetetään käyttäjän määrittelemään sähköpostiin linkin muodossa, joka on relevantti 10 minuuttia;
- Linkki vie käyttäjän verkkosivuillemme. Järjestelmä määrittää tunnuksen olemassaolon ja valtuuttaa käyttäjän;

Tämän lähestymistavan edut:

Ei tarvitse tallentaa salasanoja tai vahvistaa kenttiä;
- Salasanaasi, turvakysymyksiäsi jne. ei tarvitse palauttaa;
- Siitä hetkestä lähtien, kun käyttäjä rekisteröityy/kirjautuu sisään, voit aina olla varma, että tämä käyttäjä on pääsyvyöhykkeelläsi (että sähköpostiosoite on oikea);
- Uskomattoman yksinkertainen rekisteröintiprosessi;

Virheet:

Käyttäjätilin suojaus. Jos jollakin on pääsy käyttäjän sähköpostiin, hän voi kirjautua sisään.
- Sähköposti ei ole suojattu ja se voidaan siepata. Muista, että tämä kysymys on tärkeä myös silloin, kun salasana on unohtunut ja se on palautettava, tai missä tahansa valtuutusjärjestelmässä, joka ei käytä HTTPS:ää tiedonsiirtoon (sisäänkirjautuminen/salasana);
- Kun määrität sähköpostipalvelimesi oikein, on mahdollista, että valtuutuslinkkejä sisältävät viestit päätyvät roskapostiin.

Vertaamalla järjestelmämme etuja ja haittoja voidaan todeta, että järjestelmällä on korkea käytettävyys (maksimaalinen käyttömukavuus loppukäyttäjälle) ja samalla alhainen turvallisuusindikaattori.

Siksi on suositeltavaa käyttää sitä rekisteröintiin foorumeilla ja palveluissa, jotka eivät toimi tärkeiden tietojen kanssa.

Kuinka käyttää tätä järjestelmää

Jos sinun on vain käytettävä järjestelmää käyttäjien valtuuttamiseksi sivustollasi etkä halua purkaa tätä oppituntia palasiksi, sinun on tehtävä seuraavat:

Sinun on ladattava oppitunnin liitteenä olevat lähteet
- Etsi tiedosto tables.sql arkistosta. Tuo se tietokantaan käyttämällä phpMyAdminin tuontivaihtoehtoa. Vaihtoehtoinen tapa: avaa tämä tiedosto tekstieditorilla, kopioi SQL-kysely ja suorita se;
- Avaa include/main.php ja täytä tietokantaan yhteyden muodostamisen asetukset (määritä tietokantaan yhdistämisen käyttäjä ja salasana sekä tietokannan isäntä ja nimi). Samassa tiedostossa tulee määrittää myös sähköposti, jota käytetään järjestelmän lähettämien viestien alkuperäisenä osoitteena. Jotkut isännät estävät lähtevät sähköpostit, ellei lomake sisällä oikeaa sähköpostiosoitetta, joka luotiin isännän ohjauspaneelista, joten anna oikea osoite.
- Lataa kaikki index.php , Protected.php -tiedostot ja -resurssit sekä kansiot FTP:n kautta isäntään;
- Lisää alla oleva koodi jokaiselle PHP-sivulle, jolla haluat näyttää kirjautumislomakkeen;

Require_once "includes/main.php"; $käyttäjä = uusi käyttäjä(); if(!$user->loggedIn())( redirect("index.php"); )
- Valmiina!

Niille, jotka ovat kiinnostuneita kuinka se kaikki toimii, lue alla!

Ensimmäinen askel on kirjoittaa valtuutuslomakkeen HTM-koodi. Tämä koodi sijaitsee index.php-tiedostossa. Tämä tiedosto sisältää myös PHP-koodin, joka käsittelee lomaketietoja ja muita hyödyllisiä kirjautumisjärjestelmän toimintoja. Saat lisätietoja tästä alla olevasta PHP-koodin tarkistuksesta omistetusta osiosta.

index.php

Opetusohjelma: Super yksinkertainen rekisteröintijärjestelmä PHP- ja MySQL-kirjautumisella tai rekisteröinnillä

Kirjoita sähköpostiosoitteesi yllä niin lähetämme
sinulle kirjautumislinkki.

Kirjaudu / Rekisteröidy

Pääosaan (tunnisteiden ja väliin) sisällytin tärkeimmät tyylit (niitä ei käsitellä tässä opetusohjelmassa, joten voit katsoa niitä itse. Kansiovarat/css/style.css). Ennen sulkevaa tagia sisällytin jQuery-kirjaston ja script.js-tiedoston, jotka kirjoitamme ja analysoimme alla.


JavaScript

jQuery seuraa "Rekisteröidy/Kirjaudu"-painikkeen tilaa käyttämällä toimintoa e.preventDefault() ja lähettää AJAX-pyyntöjä. Palvelimen vastauksesta riippuen se näyttää yhden tai toisen viestin ja määrittää jatkotoimenpiteet/

property/js/script.js

$(function())( var form = $("#login-register"); form.on("lähetä", function(e)( if(form.is(.loading, .loggedIn"))( return false ; ) var email = form.find("syöte").val(), messageHolder = form.find("span") funktio (m)( if (m.error)( form.addClass("error"); messageHolder.text(m.message); ) else( form.removeClass("error").addClass("loggedIn"); messageHolder. text(m.message ); ) )); $(document).ajaxStart(function())( form.addClass("loading"); )); ;

lisättiin lomakkeeseen näyttämään AJAX-pyynnön nykyinen tila (tämä oli mahdollista menetelmien ansiosta ajaxStart()) Ja ajaxComplete(), jonka löydät tiedoston lopusta).

Tämä luokka näyttää pyörivän animoidun GIF-tiedoston (ikään kuin vihjaisikseen meille, että pyyntöä käsitellään) ja toimii myös lippuna, joka estää lomakkeen lähettämisen uudelleen (kun rekisteröintipainiketta on jo klikattu kerran). .loggedIn-luokka on toinen lippu - se asetetaan, kun sähköposti lähetettiin. Tämä lippu estää välittömästi kaikki muut lomakkeen kanssa tehtävät toimet.

Tietokantaskeema

Uskomattoman yksinkertainen lokijärjestelmämme käyttää kahta MySQL-taulukkoa (SQL-koodi on tables.sql-tiedostossa). Ensimmäinen tallentaa tietoja käyttäjätileistä. Toinen tallentaa tiedot kirjautumisyritysten määrästä.


Käyttäjätaulukkokaavio.

Järjestelmä ei käytä salasanoja, kuten kaaviosta näkyy. Siinä näet token-sarakkeen, jonka tunnukset ovat token_validity-sarakkeen vieressä. Tunnus asennetaan heti, kun käyttäjä muodostaa yhteyden järjestelmään ja asettaa sähköpostinsa lähettämään viestin (lisää tästä seuraavassa lohkossa). Token_validity-sarake asettaa ajan 10 minuuttia myöhemmäksi, jonka jälkeen token ei ole enää voimassa.


Taulukkoskeema, joka laskee valtuutusyritysten määrän.

Molemmissa taulukoissa IP-osoite on tallennettu prosessoidussa muodossa käyttäen ip2long-funktiota kentässä, jonka tyyppi on kokonaisluku.

Nyt voimme kirjoittaa PHP-koodia. Järjestelmän päätoiminnot on määritetty luokkaan User.class.php, jonka näet alta.

Tämä luokka käyttää aktiivisesti idormia (docs), nämä kirjastot ovat vähimmäistyökaluja tietokantojen kanssa työskentelyyn. Se hoitaa tietokannan pääsyn, tunnuksen luomisen ja tunnuksen validoinnin. Se tarjoaa yksinkertaisen käyttöliittymän, jonka avulla rekisteröintijärjestelmän liittäminen sivustoosi on helppoa, jos se käyttää PHP:tä.

User.class.php

Luokan käyttäjä( // Private ORM case Etsimme tätä merkkiä * @return User Palauta User-funktion arvo */ public static function findByToken($token)( // etsi merkki tietokannasta ja varmista, että oikea aikaleima on asetettu $. tulos = ORM::for_table("reg_users") ->where ("tunnus", $tunnus) ->where_raw("token_validity > NOW()") ->find_one(!$tulos)( return false; ) return new User($result) /** *); on jo olemassa, palauttaa User-funktion arvon määritetystä sähköpostiosoitteesta, joka on tallennettu tietokantaan if(User::exists($email))( return new User($email); ) // Muussa tapauksessa luo uusi käyttäjä tietokanta ja palauttaa User::create-funktion arvon määritetystä sähköpostista return User::create($email );

Tokenit luodaan SHA1-algoritmilla ja tallennetaan tietokantaan. Käytän MySQL:n ajoitustoimintoja asettaakseni 10 minuutin aikarajan tunnuksen voimassaololle.

Kun token on validoitu, kerromme suoraan käsittelijälle, että harkitsemme vain token_validity-sarakkeeseen tallennettuja tokeneja, jotka eivät ole vielä vanhentuneet.

Huomaa, että käytän taikamenetelmää __saada docs-kirjasto tiedoston lopussa siepatakseen pääsyn User-objektin ominaisuuksiin.

Tämän ansiosta on mahdollista päästä käsiksi tietokantaan tallennettuihin tietoihin ominaisuuksien $user->email, $user->token jne. ansiosta. Seuraavassa koodikatkelmassa tarkastellaan, kuinka näitä luokkia käytetään esimerkki.


Suojattu sivu

Toinen tiedosto, joka tallentaa hyödyllisiä ja tarpeellisia toimintoja, on functions.php-tiedosto. On olemassa useita ns. apureita - avustajatoimintoja, joiden avulla voit luoda selkeämpää ja luettavampaa koodia muihin tiedostoihin.

Functions.php

Funktio send_email($lähettäjä, $vastaanottaja, $aihe, $viesti)( // Apulainen, joka lähettää sähköpostia $headers = "MIME-versio: 1.0" . "\r\n"; $headers .= "Sisältötyyppi: teksti /plain; charset=utf-8" . "\r\n"; $headers .= "Lähettäjä: ".$from . "\r\n"; paluuposti($vastaanottaja, $aihe, $viesti, $headers ); ) funktio get_page_url())( // Määritä PHP-tiedoston URL-osoite $url = "http".(tyhjä($_SERVER["HTTPS"])?"":"s")."://" .$_SERVER ["SERVER_NAME"]; if(isset($_SERVER["REQUEST_URI"]) && $_SERVER["REQUEST_URI"] != "")( $url.= $_SERVER["REQUEST_URI"]; ) else( $url. = $_SERVER["PATH_INFO"] ) palauttaa $url_raja = ORM: :for_table("reg_login_attempt") ->where("ip", sprintf("%u", ip2long($ip))) ->where_raw("ts > SUBTIME(NOW(),"1:00") )") ->count(); // Kirjautumisyritysten määrä viimeisen 10 minuutin aikana tässä IP-osoitteessa $count_10_min = ORM::for_table("reg_login_attempt") ->where("ip", sprintf("%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("Liian monta kirjautumisyritystä!"); ) ) function rate_limit_tick($ip, $email)( // Luo uusi tietue taulukkoon joka laskee kirjautumisyritysten määrän $login_attempt = ORM::for_table("reg_login_attempt")->create( $login_attempt->email = $sähköpostiosoite) )); $login_attempt->save( ) function redirect($url)( header("Sijainti: $url"); exit; ) Toiminnot rate_limit Ja rate_limit_tick

valvoa valtuutusyritysten määrää ensimmäisestä yrityksestä kuluneen ajanjakson aikana. Kirjautumisyritys kirjataan tietokantaan reg_login_attempt-sarakkeeseen. Näitä toimintoja kutsutaan, kun lomaketietoja käsitellään ja lähetetään, kuten näet seuraavasta koodinpätkästä.

index.php

Try( if(!empty($_POST) && isset($_SERVER["HTTP_X_REQUESTED_WITH"]))( // Tulosta JSON-otsikon otsikko("Content-type: application/json"); // Onko tämä sähköpostiosoite kelvollinen, jos (!isset($_POST["sähköposti"]) || !filter_var($_POST["sähköposti"], FILTER_VALIDATE_EMAIL))(heite new Exception("Anna kelvollinen sähköpostiosoite."); ) // Tarkista käyttäjä saa kirjautua sisään, onko hän ylittänyt sallittujen yhteyksien määrän (lisätietoja funktiot.php-tiedostosta) rate_limit($_SERVER["REMOTE_ADDR"] // Tallenna tämä valtuutusyritys rate_limit_tick($_SERVER["REMOTE_ADDR"]) , $ _POST["sähköposti"] // Lähetä sähköposti käyttäjälle $message = ""sähköposti"] Kiitos rekisteröitymisestä!"; $message = "Kiitos rekisteröitymisestäsi sivustollemme!\n\n"; ) // Yritä valtuuttaa tai rekisteröidä käyttäjä $user = User::loginOrRegister($_POST[ "sähköposti"] ); $message.= "Voit kirjautua sisään tästä URL-osoitteesta:\n";

$message.= get_page_url()."?tkn=".$user->generateToken()."\n\n"; $message.= "Linkki vanhenee automaattisesti 10 minuutin kuluttua.";$tulos = lähetä_sähköposti($sähköpostista, $_POST["sähköposti"], $aihe, $viesti);

index.php

if(!$result)( throw new Exception("Sähköpostisi lähetyksessä tapahtui virhe. Yritä uudelleen."); ) die(json_encode(array("message" => "Kiitos! Olemme lähettäneet linkin Tarkista myös roskapostikansiosi."))); ) ) catch(Poikkeus $e)( die(json_encode(array("error"=>1, "message" => $e->getMessage()). )));

Onnistuneen kirjautumisen/rekisteröinnin jälkeen yllä oleva koodi lähettää käyttäjälle kirjautumislinkin. Tunnus tulee saataville, koska se välitetään muuttujana generoidussa linkissä menetelmällä

$_GET

tkn-merkillä

index.php

If(isset($_GET["tkn"]))( // Onko tämä token kelvollinen valtuutukseen? $user = User::findByToken($_GET["tkn"]); if($user)( // Kyllä , on uudelleenohjaus suojatulle sivulle $user->login("protected.php") ).

Koodin lopussa asetin jälleen uudelleenohjauksen index.php:hen, joten parametrin ?logout=1 URL-osoitteen kautta lähetettyä ei vaadita.

Index.php-tiedostomme vaatii lisää. suojaus - emme halua järjestelmään kirjautuneiden näkevän rekisteröintilomaketta uudelleen. Näihin tarkoituksiin käytämme menetelmää $user->loggedIn().

index.php

$käyttäjä = uusi käyttäjä(); if($user->loggedIn())( redirect("protected.php"); )

Lopuksi tässä on koodinpätkä, jonka avulla voit suojata sivustosi sivut ja tehdä niistä pääsyn vasta valtuutuksen jälkeen.

suojattu.php

// Suojaa kaikki sivustosi sivut sisällyttämällä main.php-tiedosto // ja luomalla uusi käyttäjäobjekti. Näin helppoa se on! request_once "includes/main.php"; $käyttäjä = uusi käyttäjä(); if(!$user->loggedIn())( redirect("index.php"); )

Tämän tarkistuksen jälkeen voit olla varma, että käyttäjän valtuutus onnistui. Voit myös käyttää tietokantaan tallennettuja tietoja objektin ominaisuuksien avulla $käyttäjä. Näytä käyttäjän sähköposti ja tila käyttämällä tätä koodia:

Echo "Sähköpostisi: ".$user->email; echo "Sinun sijoitus: ".$user->rank();

Menetelmä rank() käytetään tässä, koska tietokanta yleensä tallentaa numerot (0 tavalliselle käyttäjälle, 1 järjestelmänvalvojalle) ja meidän on muunnettava nämä tiedot niihin tiloihin, joihin ne liittyvät, missä tämä menetelmä auttaa meitä.

Jos haluat tehdä tavallisesta käyttäjästä järjestelmänvalvojan, muokkaa käyttäjämerkintää phpMyAdminin (tai minkä tahansa muun ohjelman kautta, jonka avulla voit hallita tietokantoja) kautta. Järjestelmänvalvojan tila ei anna tässä esimerkissä mitään oikeuksia, sivu näyttää, että olet järjestelmänvalvoja - ja siinä kaikki.

Mutta mitä tehdä tämän kanssa, voit itse kirjoittaa ja laatia koodin, joka asettaa järjestelmänvalvojille tietyt oikeudet ja ominaisuudet.

Olemme valmiit!

Olemme valmiit tämän uskomattoman super lähes yksinkertaisen muodon kanssa! Voit käyttää sitä PHP-sivustoissasi, se on melko yksinkertaista. Voit myös muokata sitä itse ja tehdä siitä haluamallasi tavalla.

Materiaalin on laatinut Denis Malyshok erityisesti verkkosivustoa varten

P.S.

Haluatko edetä PHP:n ja OOP:n hallitsemisessa? Kiinnitä huomiota premium-oppitunteihin verkkosivustojen rakentamisen eri näkökohdista, mukaan lukien ohjelmointi PHP:llä, sekä ilmainen kurssi oman CMS-järjestelmän luomisesta PHP:llä alusta alkaen OOP:n avulla:
Piditkö materiaalista ja haluatko kiittää minua?


Jaa vain ystäviesi ja kollegoidesi kanssa!

Järjestetään helpoin tapa suojata sivuja luvattomilta vierailijoilta. Tietojen välittäjä siitä, tuleeko vierailija olemaan. Istunto on selaimen evästeen analogi, ainoa ero on, että niitä ei luoda me vaan palvelimelle. Ja niitä käytetään samaan tarkoitukseen kuin evästeitä - erilaisten tietojen tallentamiseen meistä, kun siirrymme yhden sivuston sivulle. Kun suljemme selaimen, palvelin tuhoaa tämän istunnon, ja seuraavan kerran kun kirjaudumme sisään, se luo uuden. Käytämme tätä palvelinmekanismia tallentamaan istunnossa, onko käyttäjä jo valtuutettu vai ei. Lukemalla nämä tiedot, kun vierailija pyytää sivua, PHP-skripti joko avaa pääsyn salasanalla suojatuille sivuille tai pyytää sinua antamaan kirjautumistunnuksen ja salasanan.

Vaihe 1: Luo sivu kirjautumistunnuksen ja . Valtuutuslomakkeen HTML-koodi yksinkertaisimmassa muodossaan voi näyttää tältä:

Kirjaudu sisään:

Salasana:


Tänne (hyvin tiedoston alkuun) lisäämme PHP-koodin, joka tarkistaa vierailijan antaman käyttäjätunnuksen ja salasanan oikeellisuuden. Aluksi kirjoitamme:
session_start();
Tämä komento aloittaa uuden istunnon, jos sellaista ei ole jo luotu tälle vierailijalle.
Sitten tarkistamme, onko istunnossa muuttuja nimeltä "userName" - se tallentaa nimen, jos vierailija on jo valtuutettu. Jos tällainen muuttuja on olemassa, ohjaamme vierailijan pääsivulle (index.php) ja suoritamme tämän php-skriptin loppuun:
if($_SESSION["käyttäjänimi"])(

}
Kaikki muu koodi suoritetaan vain, jos käyttäjä ei ole vielä antanut oikeaa kirjautumistunnusta ja salasanaa. Osoittakaamme, mikä kirjautumistunnus ja salasana katsotaan oikein:
$validName = "Minä olen minun!";


Sitten tarkistamme, ovatko lomakkeesta lähetetyt arvot oikein. Koska määritimme lomakkeeseen POST-tiedonsiirtomenetelmän, ne pitäisi lukea superglobaalisesta muuttujasta $_POST:

Header("Sijainti: index.php");

}
Tässä aaltosulkeissa oleva koodi () suoritetaan oikeilla kirjautumis- ja salasanaarvoilla. Rivillä $_SESSION["userName"] = $validName; Kirjoitamme istuntoon muuttujan nimellä "userName", joka sisältää nyt valtuutetun käyttäjän kirjautumistunnuksen. Tämä on merkki, joka osoittaa, että hänellä on pääsy kaikkialle niin kauan kuin hänen nykyinen istunto on voimassa.
Ja jos lomakkeeseen syötetään virheellisiä tietoja, lisäämme vastaavan viestin:
muu kaiku"
Tunnus tai salasana on väärä!
";
Kaikki koodi, joka on tallennettava tiedostoon login.php, näyttää tältä:

Etusivu | Yhteystiedot | Admin

Tämä on kirjautumissivu.
Käyttäjätunnus:
Salasana: