Ajutor pentru codul de eroare al colectorului de chei. Sesiuni în PHP Cum pot fi blocate sesiunile

01.07.2020 Photoshop

Vom învăța cum să facem autentificarea simplă a utilizatorului pe site. Site-ul poate avea pagini doar pentru utilizatorii autorizați și vor funcționa pe deplin dacă le adăugăm blocul nostru de autentificare. Pentru a-l crea, aveți nevoie de o bază de date MySQL. Poate avea 5 coloane (minimum), sau mai multe dacă doriți să adăugați informații despre utilizatori. Să numim baza de date „Userauth”.

Să creăm următoarele câmpuri în el: ID pentru numărarea numărului de utilizatori, UID pentru numărul unic de identificare al utilizatorului, Nume de utilizator pentru numele utilizatorului, E-mail pentru adresa sa de e-mail și Parolă pentru parolă. Puteți utiliza baza de date existentă pentru a autoriza utilizatorul, doar, ca și în cazul unei noi baze de date, creați următorul tabel în ea.

Cod MySQL

CREATE TABLE `users` (`ID` int (11) NOT NULL AUTO_INCREMENT, `UID` int (11) NOT NULL, `Username` text NOT NULL, `Email` text NOT NULL, `Parolă` text NOT NULL, CHEIE PRIMARĂ (`ID`)) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

Acum să creăm fișierul „sql.php”. Este responsabil pentru conectarea la baza de date. Acest cod, în primul rând, creează variabile pentru server și utilizator atunci când acesta se conectează la server. În al doilea rând, va selecta baza de date, în acest caz „USERAUTH”. Acest fișier trebuie inclus în „log.php” și „reg.php” pentru a accesa baza de date.

Cod PHP

Urmează pagina de autentificare, să se numească „login.php”. În primul rând, verifică datele introduse pentru erori. Pagina are câmpuri pentru numele de utilizator, parola, butonul de trimitere și linkul de înregistrare. Când utilizatorul face clic pe butonul „Login”, formularul va fi procesat de codul din fișierul „log.php” și apoi se va autentifica.

Cod PHP

Formular de autentificare

Nume de utilizator
Parolă
Înregistrare

Apoi scriem un script pentru a vă conecta în sistem. Să-i spunem „log.php”. Are o funcție de curățare a datelor de intrare din injecțiile SQL care vă pot distruge scriptul. În al doilea rând, primește datele formularului și le verifică corectitudinea. Dacă datele de intrare sunt corecte, scriptul trimite utilizatorul la pagina de utilizatori autorizați, dacă nu, setează erori și trimite utilizatorul la pagina de autentificare.

Cod PHP

Să facem o pagină de înregistrare, numiți-o „register.php”. Este similar cu pagina de autentificare, doar că mai are câteva câmpuri, iar în loc de un link de înregistrare, există un link către login.php în cazul în care utilizatorul are deja un cont.

Cod PHP

Formular de înregistrare

Nume de utilizator
E-mail
Parolă
Repetați parola
Am un cont

Acum vom crea un script de înregistrare în fișierul „reg.php”. Acesta va include „sql.php” pentru a vă conecta la baza de date. Este folosită aceeași funcție ca și în scriptul de conectare pentru a șterge câmpul de introducere. Variabilele sunt setate pentru posibile erori. Urmează o funcție pentru a crea un identificator unic care nu a fost furnizat niciodată înainte. Datele din formularul de înregistrare sunt apoi extrase și verificate. Se face o verificare pentru a se asigura că adresa de e-mail este în formatul corect și că parola este reintrodusă corect. Apoi, scriptul verifică dacă există un utilizator cu același nume în baza de date și, dacă da, raportează o eroare. În cele din urmă, codul adaugă utilizatorul la baza de date.

Cod PHP

De asemenea, trebuie să creați un script pentru a deconecta utilizatorul din sistem. Acesta încheie sesiunea pentru utilizator cu ID-ul și numele unic dat, apoi redirecționează utilizatorul către pagina de conectare.

Cod PHP

În cele din urmă, scriptul „auth.php” poate fi folosit pentru a face paginile accesibile numai utilizatorilor autorizați. Verifică detaliile de conectare și, dacă sunt corecte, permite utilizatorului să răsfoiască paginile, iar dacă nu, îi cere să se autentifice. În plus, dacă cineva încearcă să pirateze site-ul prin crearea uneia dintre sesiuni, acesta va fi întrerupt, ca în cazul general.

Cod PHP

Una dintre condițiile din codul de mai sus este subiectul întrebării în .

Următorul cod trebuie introdus în pagina pentru utilizatorii autorizați, se numește, de exemplu, „member.php”, dar al tău poate fi numit orice vrei.

Cod PHP

Sunteți autorizat să accesați această pagină. Deconectare ( )

Autentificarea utilizatorului este gata!

Sesiunile sunt un mecanism care vă permite să stocați anumite date pe server, care sunt unice pentru fiecare utilizator. Cititorii deosebit de atenți vor observa asemănări cu cookie-urile. Și, în general, este același lucru. Totuși, punctul cheie: datele nu sunt stocate în browserul utilizatorului, ci într-un fișier special de pe server, al cărui nume este unic pentru fiecare utilizator. Iar identificatorul unic de sesiune PHP este deja stocat într-un cookie.

Să lucrăm cu sesiuni în PHP. Și să începem cu funcția session_start(). Această funcție face următoarele: dacă utilizatorul se conectează pentru prima dată, creează un identificator unic și îl scrie într-un cookie și, de asemenea, creează un fișier nou, din nou unic pentru utilizator. Dacă utilizatorul s-a autentificat deja, atunci serverul citește valoarea identificatorului unic din cookie și, în conformitate cu acesta, accesează fișierul de sesiune necesar. Din acest fișier, PHP citește toate datele și le plasează în matricea $_SESSION. Să scriem un cod simplu în care scriem o variabilă în sesiune sau să o citim dacă a fost deja scrisă.

Mai întâi apelăm funcția session_start() pe care am descris-o mai sus. Apoi verificăm dacă variabila „nume” există în sesiune. Dacă există, atunci citim datele din el și le scriem în variabila nume. Dacă nu există (adică utilizatorul a venit pentru prima dată), atunci setați variabila „nume” din sesiune la valoarea „15St.”. Următoarea linie afișează valoarea variabilei $name. Evident, prima dată când îl rulați, veți vedea o linie goală, dar a doua oară veți vedea linia „15St” citită din sesiune.

Vă sfătuiesc să introduceți acum în bara de adrese: „javascript:document.cookie” (introduceți în aceeași filă în care ați rulat scriptul). Ca rezultat, veți vedea ceva de genul acesta: „PHPSESSID=". Valoarea PHPSESSID este tocmai identificatorul unic.

Și pentru a face totul complet clar, vă sfătuiesc să găsiți chiar și fișierul de sesiune. Dacă utilizați Denwer, atunci acesta se află în folderul „tmp”. Uită-te la fișierele care încep cu „sess_” - acestea sunt aceleași fișiere de sesiune. Le puteți deschide într-un simplu bloc de note.

O altă proprietate foarte importantă este caracterul temporar al sesiunilor în PHP. Adică dacă cookie-urile sunt stocate până când sunt șterse de browser. Și browserul nu le șterge niciodată implicit. Sesiunile sunt stocate pentru timpul specificat în setările PHP. În mod implicit, aceasta este de 15 minute. Adică, dacă utilizați autentificarea bazată pe sesiune, atunci după 15 minute de inactivitate a utilizatorului, acesta va trebui să se conecteze din nou. Desigur, acest lucru este bun, deoarece dacă utilizatorul uită să „Deconectați”, atunci nu se va întâmpla nimic rău. Un atacator nu va putea folosi contul de utilizator. Mai mult, atunci când utilizați cookie-uri, acestea pot fi furate, înlocuite în browserul dvs. și, ca urmare, atacatorul este autorizat să folosească datele altcuiva, fără să cunoască măcar parola. Dar nu va fi posibil să furați o sesiune, deoarece toți parametrii sunt stocați pe server și nu există nicio modalitate de a afla despre ei.

Prin urmare, încercați să utilizați în primul rând sesiuni, mai degrabă decât cookie-uri pure în practica dvs.

Și, în sfârșit, aș dori să vă avertizez despre o greșeală foarte frecventă. Nu scoateți niciodată date către browsere înainte de a utiliza funcția session_start(), altfel va genera o eroare. Adică nu poți scrie așa:

Va apărea o eroare la rularea acestui script. Aceeași regulă aplicată cookie-urilor (funcția setcookie()). Deci, cred că totul este clar aici.

În ceea ce privește sesiunile în PHP, atunci, desigur, pot fi folosite pentru a stoca statistici, autentificare, setări personale de utilizator și alte lucruri similare.

.
În acest articol vom adăuga la înregistrarea noastră verificarea adresei de e-mail, autentificare automată și recuperarea parolei uitate. Înainte de a începe lecția, asigurați-vă că funcția mail() rulează pe serverul dvs.

Să începem prin a adăuga câmpuri la tabelul utilizatorilor. Avem nevoie de un câmp pentru a stoca adresa de e-mail, un câmp pentru starea utilizatorului (0 - inactiv, 1 - activat) și un câmp cu data înregistrării.


Adresa ta de e-mail *:



Apoi trebuie să editați save_user.php adăugând o verificare pentru corectitudinea adresei de e-mail și trimițând o scrisoare pentru a confirma înregistrarea. Scrisoarea conține un link cu două variabile trecute prin metoda get: autentificare și un cod generat, unic pentru fiecare utilizator. Avem nevoie de cod pentru ca utilizatorul să nu-și poată activa contul fără o scrisoare, iar acest lucru ne va da încredere că adresa de e-mail introdusă îi aparține cu adevărat. Să adăugăm următorul cod după extragerea datelor trimise din variabilele globale:

Dacă (isset($_POST["email"])) ( $email = $_POST["email"]; if ($email == "") ( unset($email);) )
dacă (gol ($login) sau gol ($parolă) sau gol ($cod) sau gol ($email))
//adăugați o variabilă cu adresa de e-mail
//dacă utilizatorul nu a introdus un login sau o parolă, atunci emitem o eroare și oprim scriptul
{
exit("Nu ați introdus toate informațiile, întoarceți-vă și completați toate câmpurile!"); //opriți execuția scriptului
}
if (!preg_match("/+@+\.(2,3)/i", $email)) //verificarea adresei de e-mail folosind expresii regulate pentru corectitudine
(ieșire ("E-mail nevalid introdus!");)

În cererea de adăugare a unui nou utilizator, trebuie să adăugați și data înregistrării. Dacă datele au fost introduse cu succes în baza de date și utilizatorul este înregistrat, atunci trebuie să trimiteți un mesaj la adresa introdusă:

// dacă nu este cazul, atunci salvați datele
$result2 = mysql_query("INSERT INTO users (login,parola,avatar,email,data) VALUES("$login","$parola","$avatar","$email",NOW())");
// Verificați dacă există erori
dacă ($result2=="TRUE")
{
$result3 = mysql_query ("SELECT ID FROM users WHERE login="$login"",$db);//preluare id-ul utilizatorului. Datorită lui, vom avea un cod unic de activare, deoarece nu pot exista doi identificatori identici.
$myrow3 = mysql_fetch_array($rezultat3);
$activare = md5($myrow3["id"]).md5($login);// cod de activare a contului . Să criptăm identificatorul și să ne logăm folosind funcția md5. Este puțin probabil ca utilizatorul să poată selecta această combinație manual prin bara de adrese.
$subject = „Confirmarea înregistrării”;//subiectul mesajului
$message = "Bună ziua! Vă mulțumim că v-ați înregistrat pe citename.ru\nAutentificarea dvs.: ".$login."\n
Urmați linkul pentru a vă activa contul:\nhttp://localhost/test3/activation.php?login=".$login."&code=".$activation."\nCu stimă,\n
Administrare citename.ru";//conținutul mesajului
mail($e-mail, $subiect, $mesaj, „Content-type:text/plane; Charset=windows-1251\r\n”);//trimite un mesaj

Echo „V-a fost trimisă o scrisoare cu un link prin e-mail pentru a vă confirma înregistrarea. Atenție! Link-ul este valabil 1 oră. Pagina de pornire”; //vorbesc despre o scrisoare trimisă utilizatorului
}

Mesaj trimis! Acum utilizatorul îl va deschide și va urma linkul specificat către o pagină care va verifica codul de activare. Asigurându-ne că codul este corect, confirmăm înregistrarea prin schimbarea valorii câmpului de activare din baza de date de la „0” la „1”.

Creați fișierul activation.php

Adresa de email a fost confirmată, acum știm că această adresă aparține acestui utilizator, i se va putea trimite o parolă dacă utilizatorul o uită, sau alte notificări. Dar care este diferența dintre utilizatorii activați și cei neactivați? Ambii pot accesa site-ul, prin urmare, trebuie să restricționăm accesul celor care nu sunt activați. Să deschidem fișierul testreg. php și adăugați încă o condiție la cererea bazei de date:

$result = mysql_query("SELECT * FROM users WHERE login="$login" AND password="$parola" AND activation="1"",$db); //preluați din baza de date toate datele despre utilizator cu datele de conectare introduse
//am adaugat "AND activation ="1"", adica utilizatorul va fi cautat doar printre cei activati. Este recomandabil să adăugați această condiție la alte verificări similare ale datelor utilizatorului

Dacă utilizatorul uită parola, atunci în acest caz trebuie să afișați un link pe pagina principală prin care o poate recupera și, de asemenea, puteți seta imediat o casetă de selectare pentru autentificare automată.

Conectare automată.






Registru


Ați uitat parola?

Există un link, dar niciun fișier. Să scriem trimite _ trece . php. În el vom cere utilizatorului autentificarea și adresa de e-mail. Dacă e-mail-ul și login-ul introdus se află în baza de date, îi vom trimite o nouă parolă, dacă utilizatorul a uitat-o ​​pe cea veche, deoarece ne-am asigurat în timpul înregistrării că adresa de e-mail este valabilă.

În continuare, vom face o autentificare automată. Acesta va funcționa astfel: dacă vă conectați cu succes cu caseta de selectare apăsată, auto = „da” va fi introdus în cookie. Dacă serverul vede că auto = „da” în browser, va lansa o sesiune și va prelua variabilele acolo, în cookie-uri. Apoi, există o verificare a sesiunilor care rulează în baza de date.

Să deschidem testreg. php și adăugați următorul cod după conectarea cu succes:

Dacă (isset($_POST["salvare"]))(
//Dacă utilizatorul dorește ca datele sale să fie salvate pentru autentificarea ulterioară, atunci le salvăm în cookie-urile browserului său

setcookie(„id”, $myrow[„id”], time()+9999999);)
if (isset($_POST["autovhod"]))(
//Dacă utilizatorul dorește să se autentifice automat pe site
setcookie("auto", "da", ora()+9999999);
setcookie("login", $_POST["login"], time()+9999999);
setcookie("parolă", $_POST["parolă"], oră()+9999999);
setcookie(„id”, $myrow[„id”], time()+9999999);)

Acum trebuie să începeți o sesiune în locul potrivit dacă autentificarea automată este activată. Să deschidem index.php și să scriem chiar la începutul paginii:

Fișierul CONFIG.PHP

less/reg/?mode=auth">Autentificare