Sessioni php:
La sessione è il modo più semplice per riconoscere un utente da quando si collega al server
a quando interrompe il collegamento internet.
Per essere più chiari immaginiamo di fornire una password per un'area protetta e poi di
navigare. Per ogni nuova pagina dovremo ridigitare la password, ma non è così. Questo perché
la nostra sessione è sempre attiva, di conseguenza il server si ricorda che abbiamo già
inserito la password e siamo abilitati.
Il funzionamento delle sessioni è molto semplice, il server apre una sessione con la funzione
session_start()e gli assegna un nome univoco.
Le variabili di sessione sono memorizzate dentro un array globale di nome
$_SESSION[], salvato in un file che
porta lo stesso nome della sessione.
Nello stesso tempo deposita un cookie nella macchina
dell'utente. Ogni volta che ne ha bisogno dal cookie estrae i dati per risalire alla sessione
e al file salvato. In pratica abbiamo una memoria virtuale salvata sul server.
Ogni volta che interrompiamo il collegamento il server cancella tutto (cookie compreso).
Importante:
Come abbiamo visto la sessione salva un cookie nel browser di chi naviga. Per ottenere questo
dobbiamo porre la funzione che inizia la sessione (
session_start())
prima di ogni altro dato in output
dal server. In pratica nessun altra funzione di uscita deve precedere questa funzione,
neppure il codice HTML!!
Funzioni e codici:
- session_start();
- Funzione che apre una sessione.
- $_SESSION['nomevariabile'];
- Questa riga crea l'array globale che contiene tutte le variabili di sesssione.
- session_unset();
- Distrugge le variabile nella sessione.
- session_destroy();
- Funzione che distrugge una sessione.
- $PHPSESSID
- Il nome della variabile globale che contiene il codice univoco di 32
caratteri che distingue la sessione. (Se scriviamo echo $PHPSESSID; scriviamo 32 caratteria a
video se la sessione è attiva.)
Se per motivi di protezione non è possibile utilizzare direttamente la variabile $PHPSESSID è
possibile inserire la funzione session_id();
esempio:
$PHPSESSID=session_id();
- session_set_cookie_params();
- Imposta il numero di secondi di inattività oltre i quali la sessione è cancellata. Se non è impostata utilizza le impostazioni di default del file php.ini contenuto sul server.
Codice e dove inserirlo:
La funzione che attiva una sessione, ed è la prima da inserire è
session_start().
Per creare l'array globale di sessione è sufficente scrivere $_SESSION[], per creare variabili da inserire dentro l'array possiamo scrivere $_SESSION['user']=$user;
Esempio:
<?
session_start();
$_SESSION['user']=$user;
....
?>
<html>
<head>
....
</head>
<body>
....
</body>
</html>
Le variabili di sessione possono essere create, utilizzate o modificate in qualunque posto della pagina, purché la sessione sia stata attivata prima di ogni altro tag o istruzione. La funzione
session_start non può essere preceduta da nessun output a video.
Distruzione di una sessione:
Nel caso si voglia distruggere una sessione e riaprirne un'altra, magari perchè alcuni dati
non influenzino la pagina corrente si può scrivere così:
<?
session_start();//Distruggo la vecchia sessione
session_unset();
session_destroy();
session_start();//Apro una nuova sessione
....
?>
<html>
...
Altra soluzione:
Come abbiamo visto una sessione salva un cookie nel browser utente.
Ma se il navigatore non ha i cookie abilitati? Semplice, non si apre la sessione.
Per ovviare a questo problema il linguaggio PHP ci mette a disposizione un'altra soluzione,
che però perde in sicurezza.
In questo caso possiamo passare i dati tramite URL, ossia le query string.
La sicurezza di questo procedimento è compromessa dal fatto che un malintenzionato
potrebbe prendere nota del codice di sessione. (possibilità comunque remota).
Per procedere con questa soluzione dobbiamo inserire un codice in ogni collegamento (link)
a pagine che necessitano della sessione.
<A HREF="nuovapagina.php?<?php echo SID?>">clicca qui</A>
Come abbiamo visto all'interno della query abbiamo inserito
<?php echo SID?>.
Questa istruzione può essere inserita solo in query che puntano a pagine del nostro sito
(per ragioni di sicurezza).
SID è una costante che viene definita
solo se il browser utente non supporta i cookies.
Nel caso sia stato spedito il cookie SID è una costante stringa vuota, pertanto non comporterà
nessun problema di gestione.
Sessioni in versioni PHP precedenti alla 4.0.1:
L'array globale di sessione è stato introdotto dalla versione PHP4.0.1. In precedenza le sessioni si attivavano sempre con la funzione
session_start(), ma per creare le variabili di sessione era necessario dichiararle con la funzione
session_register("nomevariabile"); Il valore della variabile si inseriva nel codice sottostante, in pratica la macchina lo salvava da sola.
Esempio:
<?
session_start();//Apriamo la sessione
session_register("nomevariabile");//Salviamo una variabile nella sessione, ne possiamo salvare quante ne vogliamo
$nomevariabile=...;//Definiamo la variabile
....
?>
Per togliere i dubbi nati queste poche righe teoriche, vi invitiamo a leggere l'articolo
sul contatore con sessioni.