Sei sulla pagina 1di 5

I COOKIE e le SESSION

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 "utente loggato"; occorrer
"salvare" tale dato in modo da 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
booleano (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 soffrono 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.
1.

Il primo parametro il nome della variabile di tipo cookie.

2.

Il secondo il valore della variabile.

3.

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).

4.

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 "/".

5.

Il quinto ci indica il dominio per il quale il cookie valido e leggibile e di default si intende il dominio
completo del server.

6.

Il sesto pu assumere valore 0 e 1 e assume di default assume valore pari a 0; se pari a 1


specifica che il cookie potr essere inviato soltanto se in corso una https (un 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 cookie si avr un comando di questo genere:
1. <?php
2. setcookie ("miniscript", "stringa da salvare", time()+3600, "/");
3. ?>
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; questo un lungo integer
che rappresenta orario e data contando i secondi dalla mezzanotte del 01/01/1970); 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 alla variabile
all'interno dell'array associativo $_COOKIES. Molto semplicemente:
1. <?php
2. echo $_COOKIES['miniscript'];
3. ?>
La modifica di un cookie avviene reimpostandolo; ponendo di voler modificare il precedente cookie fatto
come esempio si avr
1. <?php
2. setcookie ("miniscript", "nuova stringa da salvare", time()+3600, "/");
3. ?>
Per l'eliminazione non vi una specifica funzione: si reimposta il cookie con una data del passato
1. <?php
2. setcookie ("miniscript", "nuova stringa da salvare", time()-3600, "/");
3. ?>
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 proprio 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.
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 un array a cui possibile attribuire le chiavi che desideriamo.
Avremo pertanto:
1. <?php
2. session_start();
3. $_SESSION['miniscript'] = "questo il contenuto della variabile di sessione";
4. ?>
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 rendendoli 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.
Ecco due pagine web di esempio:
1) crea.php
1. <?php
2. session_start();
3. $_SESSION['saluto'] = "Benvenuto";
4. ?>
5. <a href="leggi.php">leggi le variabili</a>

2) leggi.php
1. <?php
2. session_start();

3. echo $_SESSION['saluto'];
4. ?>
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:
1. <?php
2. session_start();
3. session_destroy();
4. echo "la sessione stata distrutta";
5. ?>
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 protette non saranno visualizzabili se non esiste tale variabile.
VARIABILI DAMBIENTE
Il PHP ci mette a disposizione le variabili dambiente o superglobals predefinite che consentono di
agevolare la programmazione coinvolgendo il server.
Tramite la funzione phpinfo( ) possiamo ottenere un elenco completo di tutte le variabili dambiente
predefinite. Ecco di seguito un elenco delle pi importanti.
$_SERVER[PHP_SELF] contiene lindirizzo della pagina in corso di interpretazione sul browser.
Da utilizzare quando si vuole ricaricare la pagina in uso.
$_SERVER[HTTP_USER_AGENT] contiene il nome della versione del browser
$_SERVER[[HTTP_HOST] contiene lindirizzo del server sul quale lo script viene eseguito
$_SERVER[[REMOTE_ADDR] contiene lindirizzo IP del visitatore, quindi comodo per verificare
ad esempio in un contatore di accessi se stato effettuato un refresh della pagina oppure avvenuta
una nuova connessione.
$_GET[ ] e $_POST[ ] array associativi che contengono le chiavi di accesso alle variabili lette dal
client tramite i metodi di tipo GET o POST
$_REQUEST[ ] un array associativo che contiene tutte le variabili contenute negli array $_POST,
$_GET,$_COOKIE.
$_COOKIE[ ] un array associativo che contiene le variabili inviate allo script corrente attraverso i
cookies

SUPERGLOBALS
Php provides a large number of predefined variables to any script which it runs.
Many of this variables, however, cannot be fully documented as they are dependent upon which server is
running, the version and setup of the server, and other factors. Predefined variables are already defined, as
their name implies, and can be used without you having to create them first. The majority of predefined
variables are used to provide information from and about the web server, the web browser and the user.
they are called superglobals.
VARIABLE NAME

VARIABLE DESCRIPTION

$_GET

HTTP GET variables

$_POST

HTTP POST variables

$_FILES

HTTP file upload variables

$_SERVER

Server and environment information

$_COOKIE

HTTP cookies

$_SESSION

Session variables

$_REQUEST

HTTP request variables

Read your PHP bible( Beginning PHP5, chapter 2, from page 40)