Cum se fac sesiuni și autorizări php în mod corect

  • PHP
  • Identificarea utilizatorilor
  • HTTP Cookie

În fața a două opțiuni:
1. Sesiune + DB. Am stabilit durata de viață a sesiunii pentru o săptămână și nu scăldăm. În tabela sesiunilor din baza de date scrieți session_id, user_id, user_agent, expedition_section și comparați / actualizați-le pentru fiecare solicitare, cu excepția celor de tip AJAX, deși pentru ele este posibilă.







"random_hash" este doar un set aleatoriu de litere care înlocuiește session_id în primul exemplu. O astfel de parolă temporară, este mai sigură decât hash-ul parolei unui utilizator.
La schimbarea parolei sau la solicitarea utilizatorului, toate sesiunile sunt șterse din baza de date și toate cookie-urile / sesiunile devin nevalide.

Până acum mă uit la prima opțiune.

Alexander Kazakevich. Puteți amesteca înregistrarea logurilor și a agenților și sesiunilor utilizatorilor într-o singură grămadă, dar de ce? Sesiunea funcționează destul de bine pe cont propriu și, în același timp, nimeni nu vă deranjează să scrieți jurnale, cel puțin în baza de date, chiar și în fișiere.

Alexander Kazakevich. vorbiți despre polimorfism. Clasa de sesiuni nu trebuie să știe unde vor fi efectiv stocate sesiunile. Pentru a face acest lucru, trebuie să descrieți interfața de stocare a sesiunii. Clasa de stocare (driver) trebuie să implementeze această interfață. În constructorul clasei de sesiune, acceptăm parametrul introdus de interfața noastră.

Totul se dovedește că nu depindeți de depozit. Puteți trece orice driver la constructorul de clasă de sesiuni, care implementează interfața și totul va funcționa fără a schimba codul.

Acum, despre profesioniști. Sesiunile în php sunt stocate în fișiere. Acest lucru înseamnă că, atunci când a pus o sarcină și în spatele echilibrist 2+ serverul backend, vă cere de la client va începe să vină pe același server, apoi pe de altă parte. Utilizatorul va fi de la cererea la cerere, apoi logat, apoi este dezinstalat. Desigur, există soluții, sesiuni lipicioase, php cum ar fi configurabile pentru stocare în redis. Dar cea mai bună soluție este de a ignora mecanismul de stocare sesiune în sesiunile de clasă și oferă mai multe de stocare diferite și configurația utilizatorului prin intermediul foarte capabil, la momentul potrivit pentru a schimba motorul de stocare de la unul la altul, și chiar să scrie opinia ta, dacă nu sunteți mulțumit cu standardul.







Dar va fi dificil pentru un începător să înțeleagă. În primul rând trebuie să citiți o carte simplă de modele, unde veți spune ce este o compoziție, de ce aveți nevoie de ea și ce este mai bine decât moștenirea.

În general, PHP ca prima limbă nu este foarte bună, dă o mulțime de libertate și, prin urmare, există atât de mult cod doltishby pe ea. Dacă începeți cu un limbaj puternic, cum ar fi Java, atunci eficiența învățării ar fi de multe ori mai mare, dar pragul de intrare ar crește, de asemenea, dar nu uneori. Dar acest lucru este ideal, bineînțeles. Și eu am început cu PHP.

Sunt implicat în programarea web

este foarte ușor
de exemplu, voi folosi php
dacă doriți ca utilizatorul să nu poată intra în biroul privat fără o anumită sesiune, atunci puteți utiliza
dacă (! isset ($ _ SESSION ['login'])) // aceasta înseamnă că dacă nu există nicio sesiune, atunci aruncă orice fișier de care aveți nevoie
antet ("Locație / index.php"); // specificați aici un link către acest fișier

$ authdb = PDO nou ("mysql: host = localhost; dbname = root", "toor", "parola");

tabela mysql a tabelului este inserată în fișierul users.sql și încărcată pe server

SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO";
SET time_zone = "+00: 00";

/ *! 40101 SET @OLD_CHARACTER_SET_CLIENT = @@ CHARACTER_SET_CLIENT * /;
/ *! 40101 SET @OLD_CHARACTER_SET_RESULTS = @@ CHARACTER_SET_RESULTS * /;
/ *! 40101 SET @OLD_COLLATION_CONNECTION = @@ COLLATION_CONNECTION * /;
/ *! 40101 SET NAMES utf8 * /;

--
-- Bază de date: "nume de bază de date"
--

--
-- Structura tabelului "utilizatori"
--

CREAȚI TABELUL DACĂ NU EXISTĂ "utilizatori" (
`id` int (11) NU NULL AUTO_INCREMENT,
`login` varchar (100) COLLATE utf8_unicode_ci NOT NULL,
`parola 'varchar (100) COLLATE utf8_unicode_ci NOT NULL,
`e-mail` varchar (100) COLLATE utf8_unicode_ci NU NULL,
TASTĂ PRIMARĂ (`id`)
) MOTOR = MyISAM DEFAULT CHARSET = utf8 COLLATE = utf8_unicode_ci;

/ *! 40101 SET CHARACTER_SET_CLIENT = @ OLD_CHARACTER_SET_CLIENT * /;
/ *! 40101 SET CHARACTER_SET_RESULTS = @ OLD_CHARACTER_SET_RESULTS * /;
/ *! 40101 SET COLLATION_CONNECTION = @ OLD_COLLATION_CONNECTION * /;

în general, toate
scripturile din imprimanta pot fi achiziționate aici script-uri online







Articole similare

Trimiteți-le prietenilor: