5 Mar 2011 1 commenti
Le sessioni e i cookie rispondono alla necessità di memorizzare in modo più o meno permanentemente alcuni dati e informazioni durante la navigazione dell'utente nel sito in modo da essere riutilizzati successivamente in altre pagine.
Facciamo alcuni esempi classici:
- un utente dopo aver fatto correttamente il login risulterà essere un "utete loggato"; occorrera "salvare" tale dato in modo da per poter essere accertato in tutte le altre pagine che desideriamo proteggere;
- un utente sceglie come lingua di visualizzazione del sito l'inglese e, da quel momento, tale scelta deve essere permanente anche nelle successive pagine.
- in un sito di e-commerce un utente navigando potrà aggiungere e rimuovere prodotti dal carrello; ognuna di queste operazioni devono essere registrate in modo da poter avere conoscenza di ciò che l'utente ha nel carrello in un determinato momento.
Gli strumenti che è possibile utilizzare in tali casi sono i cookie e/o le sessioni.
I COOKIE
I cookie è il metodo per memorizzare, sul computer dell'utente, delle informazioni che vogliamo persistano anche nelle successive visite al nostro sito.
La mole di tali dati deve essere rigorosamente limitata; ad esempio un username, impostazioni di tipo boleano (vero/falso) o di preferenza dell'utente (ad esempio la lingua preferita), etc.. Inoltre i dati devono essere salvati in formato stringa (eventualmente serializzati con la funzione serialize).
I cookie sono registrati dal browser in una specifica directory in formato di file di testo (secondo modalità diverse dei vari browser).
I cookie in molti applicativi possono tornare molto utili data la loro possibilità di salvare dati su pc dell'utente in modo durevole ma tuttavia sofforno di importanti implicazioni legati alla sicurezza.
Infatti, i cookie non sono adatti per salvare dati sensibili come password o dati personali. Teniamo presente che questi dati verranno salvati in chiaro (non criptati) in un file sul computer dell'utente e, quindi se letti, possono rivelare informazioni riservate.
Inoltre il singolo utente potrà autoimpostarsi il valore eventualmente diverso rispetto a ciò che noi desideriamo, nonchè eliminarlo: caso tipico è la rimozione di un ban basato sui cookie.
L'uso dei cookies in PHP è estremamente semplice anche perché avviene mediante un'unica funzione,setcookie().
L'unica raccomandazione che occorre fare è che questa funzione deve essere impiegata prima che la pagina generi qualsiasi tipo di output (con echo o con html, o mettendo semplicemente un rigo bianco).
La funzione setcookie() accetta ben 6 parametri di cui solo i primi due sono obbligatori.
- Il primo parametro è il nome della variabile di tipo cookie.
- Il secondo è il valore della variabile.
- Il terzo è specifica il tempo per il quale il cookie deve essere conservato, cioè la data di scadenza; in mancanza si eliminerà alla chiusura del browser; tale durata verrà indicata in base al valore UNIX timestamp (secondi intercorsi dal 1 gennaio 1970).
- Il quarto specifica la cartella del server per il quale il cookie sarà valido; se non verrà specificato il cookie sarà valido solo nell'ambito della directory in cui si trova la pagina che lo ha inviato; per essere valido in tutte le cartelle del sito si indicherà "/".
- Il quinto ci indica il dominio per il quale il cookie è valido e leggibile e di default si intende il dominio completo del server.
- Il sesto può assumere valore 0 e 1 e assume di default assume valore pari a 0; se prari a 1 specifica che il cookie potrà essere inviato soltanto se è in corso una https (una protocollo di trasferimento dei dati in modo sicuro.
Tralasciamo gli ultimi due parametri che hanno un utilizzo in casi specifici e particolari e concentriamoci sui primi 4.
Generalmente per creare un coockie si avrà un comando di questo genere:
<?php setcookie ("miniscript", "stringa da salvare", time()+3600, "/"); ?>
Analizziamo i 4 parametri: il nome della variabile sarà "miniscript"; il valore di tale variabile sarà "stringa da salvare"; la durata è di 1 ora (60 secondi * 60 minuti = 3600 secondi; sommando 3600 al time() del momento di creazione del cookie si avrà la data di scadenza in formato UNIX timestamp); la validità del cookie sarà in tutto il nostro sito.
Una volta impostato, i dati all'interno di un cookie questo sarà accessibile da php ricorrendo una variabile all'interno dell'array associativo $_COOKIES. Molto semplicemente:
<?php echo $_COOKIES['miniscript']; ?>
La modifica di un cookie avviene semplicemento reimpostandolo; ponendo di voler modificare il precedente cookie fatto come esempio si avrà:
<?php setcookie ("miniscript", "nuova stringa da salvare", time()+3600, "/"); ?>
Per l'eliminazione non vi è una specifica funzione, ma si adotta un escamotage; si reimposta il cookie con una data del passato:
<?php setcookie ("miniscript", "nuova stringa da salvare", time()-3600, "/"); ?>
Da notare il segno meno presente nel terzo parametro.
LE SESSIONI
La logica sulla quale si basano le sessioni può essere semplicisticamente descritta in tal modo: tutte le volte che un utente, tramite browser, effettua una visita ad un sito quest'ultimo assegna a tale utente un id di sessione detto SID il quale verrà salvato sul pc dell'utente all'interno di un cookie; durante tutta la navigazione, l'utente avrà sul suo pc tale cookie e costituirà un identificativo univoco della sessione.
Il server registrerà le informazioni raccolte durante la navigazione su un file di testo che verrà salvato in remoto (ovvero sul server, generalmente nella cartella tmp, la cartella di file temporanei). Il file avrà come nome l'id di sessione così che ogni utente avrà il propio file con le proprie variabili di sessione.
Quindi, mentre i cookie sono salvati sul pc dell'utente le sessioni salvano i dati sul server stesso ma si servono comunque di un cookie, il SID.
La creazione di una sessione avviene con il comando session_start() e deve essere posizionato prima di qualsiasi altro output (generato con echo o con html, o mettendo semplicemente un rigo bianco).
Quindi, per evitare comportamenti anomali dello script e/o errori del tipo "Cannot modify header information - headers already sent by..." il comando session_start() dovrà essere posizionato al primo rigo.
Una volta avviata la sessione potranno essere create variabili di sessione utilizzando la variabile $_SESSION in particolare si tratta di una array a cui possibile attribuire le chiavi che desideriamo. Avremo pertanto:
<?php session_start(); $_SESSION['miniscript'] = "questo è il contenuto della variabile di sessione"; ?>
Materialmente il nome della variabile di sessione e il relativo contenuto verranno salvate sul file di sessione (riferito a quello specifico SID) presente sul server.
Una volta creata tale variabile in una determinata pagina del nostro sito per renderla disponibile in una nuova pagina occorrerà ripristinare la sessione.
Il ripristino di una sessione creata in precedenza avverrà sempre con il comando session_start() e ciò consentirà di richiamare variabili di sessione precedentemente valorizzate (leggendo i dati che il server ha salvato sul file di sessione e renderndoli disponibili nello script php corrente). Per ripristino si intende, quindi, la verifica dell'esistenza del cookie SID sul pc dell'utente: una volta individuato per il server sarà possibile risalire al suo file di sessione e, quindi, alle variabili salvate al suo interno.
E' più semplice al farsi che al dirsi. Immagginiamo due pagine web:
1) crea.php
<?php session_start(); $_SESSION['saluto'] = "Benvenuto"; ?> <a href="leggi.php">leggi le variabili</a>
2) leggi.php
<?php session_start(); echo $_SESSION['saluto']; ?>
In questo esempio, nella pagina crea.php abbiamo creato la variabile di sessione 'saluto' mentre nella pagina leggi.php, dopo aver ripristinato la sessione, abbiamo stampato a video tale variabile creata in precedenza.
L'eliminazione delle variabili di sessione avviene con il comando session_destroy() che dovrà essere utilizzato dopo aver ripristinato la sessione:
<?php session_start(); session_destroy(); echo "la sessione è stata distrutta"; ?>
Un caso classico di utilizzo delle variabili di sessione è nel caso di script per il login.
In pratica si andrà a creare una variabile di sessione (ad esempio $_SESSION['autenticato']) solo in caso di login positivo e le pagine protetette non saranno visualizzabili se non esiste tale variabile.
Olimpio Romanella
Sono un appassionato di Web Developing con un particolare debole per php. Mi dedico principalmente dello sviluppo back-end ed in particolare programmazione lato server con php, sviluppo di database relazionali MySql e progettazione di CMS di piccole e medie dimensioni.
Mi avvalgo del framework javascript Jquery, utilizzando molti dei suoi plugin e nei dei miei progetti utilizzo spesso il framework MVC Codeigniter.
Stefano
05 January 2018 ore 15:14