Gestire gli utenti con PHP

20 marzo 2006

In questo articolo vogliamo introdurre i lettori ai concetti fondamentali riguardanti la gestione degli utenti all’interno di un sito web o di un’applicazione internet. Tratteremo argomenti relativi all’autenticazione, alla gestione dei permessi, alla sicurezza ed alla registrazione, in modo da presentare un’analisi completa delle problematiche che si devono affrontare durante la stesura di un sistema simile.

Gli script proposti implementano una struttura procedurale abbastanza frammentata, in modo da permettere la semplice modifica per adattarli alle proprie esigenze.

Prima di iniziare esorto i lettori a leggere gli articoli riguardanti i Tutto sui cookie e le Sessioni alternative in Php presenti su HTML.it, anche se non essenziali per la corretta comprensione degli articoli.

Abbiamo racchiuso i file utilizzati in questo articoli in tre diversi archivi ZIP che corrispondono alle tre parti in cui è diviso questo articolo: uno relativo all'autenticazione, uno relativo alla registrazione e uno ai permessi. Tutti gli script sono stati comunque racchiusi anche in un unico archivio. Vanno tenuti presenti in modo particolare poiché faremo riferimento ad essi per ogni commento al codice interno all’articolo.

Nelle prime pagine dell'articolo svilupperemo un semplice sistema di autenticazione che permetterà di svolgere le seguenti operazioni:

  • Eseguire i login per autenticarsi e visualizzare pagine private
  • Effettuare il logout
  • Mantenere informazioni sull’utente loggato attraverso l’utilizzo di cookie o link

Il sistema, una volta verificata la correttezza dei dati passati, inizializzerà una sessione all’interno del nostro database, ed utilizzerà un ID univoco come riferimento a questa. Questo ID verrà passato tra le pagine sfruttando o i cookie o la query string dell’URL, in base alle scelte del programmatore.

Prima di iniziare, prepariamo il nostro database: creiamo una tabella per gestire le sessioni con il seguente comando:

CREATE TABLE sessioni (
   uid CHAR(32) NOT NULL,
   user_id INT UNSIGNED NOT NULL,
   creation_date INT UNSIGNED NOT NULL,
   INDEX(uid)
);

La tabella sessioni contiene tre campi:

  • Il campo uid conterrà l’ID univoco che identificherà la sessione di riferimento per un utente autorizzato. Verrà utilizzato per reperire l’ID dell’utente nella tabella ‘utenti’, e come controllo per sapere se l’utente è autorizzato o meno
  • Il campo user_id conterrà l’ID della tabella ‘utenti’ al quale la sessione fa riferimento
  • Il campo creation_date conterrà la data (espressa in secondi) di creazione della sessione; verrà utilizzato per controllare se la sessione è scaduta o meno.

Creiamo ora la tabella per salvare informazioni sugli utenti:

CREATE TABLE utenti (
   id INT UNSIGNED NOT NULL AUTO_INCREMENT,
   name VARCHAR(30) NOT NULL,
   surname VARCHAR(30) NOT NULL,
   username VARCHAR(30) NOT NULL,
   password CHAR(32) NOT NULL,
   PRIMARY KEY(id),
   INDEX(username, password)
);

La tabella utenti contiene cinque campi:

  • Il campo id conterrà un numero univoco per identificare il record contenete i dati dell’utente loggato
  • I campi name e surname conterranno rispettivamente nome e cognome dell’ utente
  • Il campo username conterrà il nome utente necessario per effettuare il login
  • Il campo password conterrà la password (criptata attraverso la funzione MD5) che l’utente dovrà utilizzare per effettuare il login

Dato che il processo di registrazione verrà analizzato nei prossimi articoli, riempiremo ora la tabella utenti manualmente:

INSERT INTO utenti (name, surname, username, password) VALUES (‘Gabriele’, ‘Farina’,'darkbard’,MD5(‘test’));
INSERT INTO utenti (name, surname, username, password) VALUES (‘Fabio’, ‘Sutto’,'fabio heller’,MD5(‘test2′));
INSERT INTO utenti (name, surname, username, password) VALUES (‘Giancarlo’, ‘Moschitta’,'gm’,MD5(‘test3′));

L’unica cosa da appuntare è l’utilizzo della funzione MD5 (facente parte del core di funzioni di MySQL): data una stringa in input, questa funzione restituisce un valore di 32 bit irreversibile che rappresenta univocamente la stringa data. Salvando nel database le password attraverso MD5 aumentiamo leggermente la sicurezza: difatti, anche avendo accesso manuale al database, non si avrà alcun modo per conoscere la password relativa ad un dato utente.

Se vuoi aggiornamenti su Gestire gli utenti con PHP inserisci la tua e-mail nel box qui sotto:
 
X
Se vuoi aggiornamenti su Gestire gli utenti con PHP

inserisci la tua e-mail nel box qui sotto:

Ho letto e acconsento l'informativa sulla privacy

Acconsento al trattamento di cui al punto 3 dell'informativa sulla privacy