Questo sito utilizza cookie per raccogliere dati statistici.
Privacy Policy
# Sessioni
## Quale problema risolvono?
Le sessioni sono una soluzione al problema della **persistenza dei dati** tra le richieste HTTP, con un approccio più sicuro rispetto al solo utilizzo dei cookies. Sebbene i **cookies** siano utili per mantenere le informazioni lato client, come le preferenze o la lingua dell'utente, **non sono adatti per memorizzare informazioni sensibili** o gestire sessioni di login, poiché possono essere manipolati e letti facilmente dall'utente.
### Problema della sicurezza lato client
Memorizzare tutte le informazioni relative a uno stato (ad esempio, dati di autenticazione o informazioni sul carrello) **solo nei cookies lato client** è rischioso per diverse ragioni:
- **Manipolazione dei dati**: i cookies possono essere modificati o letti dall'utente tramite strumenti del browser, consentendo potenzialmente attacchi come la falsificazione dell'identità.
- **Riservatezza**: memorizzare informazioni sensibili nei cookies espone dati che dovrebbero essere mantenuti riservati.
## Come le sessioni risolvono questo problema
Le sessioni permettono di memorizzare i dati **lato server**, riducendo i rischi legati alla manipolazione e alla sicurezza. I dati relativi a una sessione utente vengono mantenuti sul server, mentre il client conserva solo un **identificatore univoco di sessione**, spesso sotto forma di un cookie chiamato `PHPSESSID`.
**Meccanismo delle sessioni**:
1. **Creazione della sessione**: il server genera un identificatore di sessione univoco e lo invia al client come cookie.
2. **Memorizzazione dei dati**: le informazioni di sessione vengono salvate sul server e sono accessibili tramite l'identificatore.
3. **Comunicazione con il client**: ad ogni richiesta, il browser invia l'identificatore di sessione, consentendo al server di recuperare i dati associati.
Questo approccio permette di mantenere l'informazione sensibile lato server, proteggendo i dati da manipolazioni.
## Implementazione delle sessioni utilizzando i cookies
Quando si utilizza una sessione, PHP crea automaticamente un cookie con l'identificatore di sessione (`PHPSESSID`) e lo invia al client. Questo cookie viene incluso automaticamente nelle richieste successive dal browser, consentendo al server di identificare la sessione e recuperare i dati salvati.
## Utilizzo delle sessioni in PHP
PHP ha una gestione delle sessioni semplice e integrata. Ecco come implementarle:
### Iniziare una sessione
Per iniziare una sessione in PHP, si utilizza la funzione `session_start()`, che deve essere chiamata **prima di qualsiasi output** HTML o contenuto.
**Esempio**:
```php
<?php
// Inizia la sessione
session_start();
// Imposta una variabile di sessione
$_SESSION['username'] = 'Mario';
// Accedi ai dati della sessione
echo 'Ciao, ' . $_SESSION['username'];
?>
```
**Cosa succede qui**:
- PHP crea un identificatore univoco di sessione (se non esiste già) e lo invia al client come cookie `PHPSESSID`.
- I dati della sessione vengono salvati sul server e sono accessibili tramite l'array globale `$_SESSION`.
### Accesso ai dati di sessione
Le variabili di sessione possono essere lette in qualsiasi punto dello script dopo l'inizio della sessione.
**Esempio**:
```php
<?php
session_start();
if (isset($_SESSION['username'])) {
echo 'Bentornato, ' . $_SESSION['username'];
} else {
echo 'Benvenuto, ospite!';
}
?>
```
#### 3. Eliminare i dati di sessione
È possibile eliminare variabili di sessione specifiche con `unset()` o rimuovere completamente la sessione.
**Esempio per rimuovere una variabile specifica**:
```php
<?php
session_start();
// Rimuovere una variabile di sessione
unset($_SESSION['username']);
?>
```
**Esempio per distruggere la sessione**:
```php
<?php
session_start();
// Rimuovere tutte le variabili di sessione
session_unset();
// Distruggere la sessione
session_destroy();
echo 'La sessione è stata distrutta.';
?>
```
- `session_unset()` rimuove tutte le variabili di sessione.
- `session_destroy()` distrugge la sessione, ma il cookie `PHPSESSID` rimane sul client fino alla sua scadenza o eliminazione manuale.
## Come funzionano internamente le sessioni in PHP
Quando un utente visita il sito, PHP crea un file di sessione sul server, solitamente in una cartella temporanea specificata dalla configurazione (`session.save_path`). Il file memorizza le informazioni associate a quell'identificatore di sessione.
Il cookie `PHPSESSID` viene inviato al browser, che lo include automaticamente nelle richieste successive. Il server utilizza questo ID per accedere al file di sessione corretto e leggere o modificare i dati.
## Sicurezza delle sessioni
Per proteggere le sessioni:
- **`session_regenerate_id()`**: usa questa funzione per rigenerare l'ID di sessione a intervalli regolari, specialmente dopo l'autenticazione, per prevenire attacchi di session fixation.
- **Imposta l'attributo `Secure`** nei cookies se il sito utilizza HTTPS, in modo che l'ID di sessione non venga trasmesso in chiaro.
- **Limita l'accesso al cookie di sessione** impostando `HttpOnly`, che impedisce l'accesso al cookie tramite JavaScript, prevenendo attacchi XSS.
**Esempio di rigenerazione dell'ID di sessione**:
```php
<?php
session_start();
session_regenerate_id(true); // Rigenera l'ID di sessione e cancella quello precedente
?>
```