Sostieni AppuntiFacili con una piccola donazione su PayPal

Dona con PayPal
AppuntiFacili
Torna Indietro Segnala errore

Variabili Superglobali in PHP

✍️ Dennis Turco 🏷️ Informatica 📘 PHP
Ultima modifica:
#php#programmazione#web#superglobali#variabili

1. Cosa sono le variabili superglobali?

Le variabili superglobali sono variabili predefinite di PHP, sempre disponibili in qualsiasi punto dello script (funzioni, classi, file inclusi), senza bisogno di dichiararle o importarle.

Il loro nome inizia sempre con $_ seguito da una parola in maiuscolo.

INFO

Le superglobali sono array associativi: contengono coppie chiave → valore.

2. Panoramica delle superglobali

VariabileDescrizione
$_GETDati inviati tramite URL (metodo GET)
$_POSTDati inviati tramite form (metodo POST)
$_REQUESTUnione di $_GET, $_POST e $_COOKIE
$_SERVERInformazioni sul server e sulla richiesta HTTP
$_SESSIONDati della sessione utente (persistenti tra le pagine)
$_COOKIEDati dei cookie salvati nel browser
$_FILESFile caricati tramite form (<input type="file">)
$_ENVVariabili d’ambiente del sistema operativo
$GLOBALSAccesso a tutte le variabili globali dello script

3. $_GET

Contiene i dati passati nell’URL dopo il simbolo ?.

Esempio di URL:

http://localhost/pagina.php?nome=Luca&eta=20
<?php
  $nome = $_GET['nome'];  // "Luca"
  $eta  = $_GET['eta'];   // "20"
  echo "Ciao, $nome! Hai $eta anni.";
?>

WARNING

I dati ricevuti via $_GET sono visibili nell’URL e non adatti per informazioni sensibili (password, dati personali).

4. $_POST

Contiene i dati inviati tramite un form HTML con metodo POST. I dati non sono visibili nell’URL.

<?php
  $nome = $_POST['nome'];
  echo "Hai inviato: $nome";
?>

INFO

$_POST è usato per form di login, registrazione e invio dati sensibili perché i valori non appaiono nella barra degli indirizzi.

Differenza GET vs POST

Caratteristica$_GET$_POST
Dati visibili nell’URLNo
Adatto per dati sensibiliNo
Lunghezza datiLimitata (~2000 char)Molto più grande
Uso tipicoFiltri, ricercheLogin, form

5. $_REQUEST

Raccoglie in un unico array i dati di $_GET, $_POST e $_COOKIE.

<?php
  $nome = $_REQUEST['nome'];  // funziona sia con GET che con POST
?>

WARNING

È comodo ma meno sicuro: non distingue la provenienza del dato. Preferisci sempre $_GET o $_POST esplicitamente.

6. $_SERVER

Contiene informazioni sul server, sull’ambiente e sulla richiesta HTTP.

<?php
  echo $_SERVER['PHP_SELF'];       // percorso del file corrente
  echo $_SERVER['REQUEST_METHOD']; // "GET" o "POST"
  echo $_SERVER['SERVER_NAME'];    // nome del server (es. "localhost")
  echo $_SERVER['HTTP_USER_AGENT']; // browser dell'utente
  echo $_SERVER['REMOTE_ADDR'];    // indirizzo IP dell'utente
?>

Uso pratico: rilevare il metodo della richiesta

<?php
  if ($_SERVER['REQUEST_METHOD'] === 'POST') {
      echo "Modulo inviato con POST";
  } else {
      echo "Pagina visualizzata normalmente";
  }
?>

7. $_SESSION

Permette di memorizzare dati relativi a un utente tra una pagina e l’altra (es. utente loggato, carrello, preferenze).

La sessione deve essere avviata con session_start() prima di qualsiasi output HTML.

<?php
  session_start();

  // Salvare un dato in sessione
  $_SESSION['utente'] = "Mario";
  $_SESSION['ruolo']  = "admin";
?>
<?php
  // Leggere la sessione in un'altra pagina
  session_start();
  echo "Benvenuto, " . $_SESSION['utente'];  // Benvenuto, Mario
?>
<?php
  // Distruggere la sessione (logout)
  session_start();
  session_destroy();
  echo "Logout effettuato.";
?>

INFO

I dati di sessione sono salvati sul server, non nel browser. Il browser riceve solo un ID di sessione (cookie PHPSESSID).

I cookie sono piccoli dati salvati nel browser dell’utente e inviati al server ad ogni richiesta.

<?php
  // Impostare un cookie (valido per 7 giorni)
  setcookie("lingua", "it", time() + 7 * 24 * 3600);
?>
<?php
  // Leggere un cookie
  if (isset($_COOKIE['lingua'])) {
      echo "Lingua preferita: " . $_COOKIE['lingua'];
  }
?>

WARNING

I cookie sono visibili e modificabili dall’utente. Non usarli per dati sensibili senza cifratura.

Caratteristica$_SESSION$_COOKIE
Dove sono salvatiSul serverNel browser
DurataFino alla chiusura del browser (default)Scade alla data impostata
SicurezzaPiù sicuriMeno sicuri
Visibilità utenteNon visibiliVisibili nel browser

9. $_FILES

Gestisce i file caricati tramite un form HTML.

<form method="POST" enctype="multipart/form-data">
  <input type="file" name="foto">
  <button type="submit">Carica</button>
</form>
<?php
  if (isset($_FILES['foto'])) {
      $nome_file = $_FILES['foto']['name'];
      $tmp       = $_FILES['foto']['tmp_name'];
      move_uploaded_file($tmp, "uploads/" . $nome_file);
      echo "File caricato: $nome_file";
  }
?>

10. Sicurezza: validare sempre i dati

I dati ricevuti dall’esterno (GET, POST, COOKIE) possono contenere codice malevolo. È fondamentale validarli e sanitizzarli.

<?php
  // Rimozione di tag HTML e caratteri pericolosi
  $nome = htmlspecialchars($_POST['nome']);
  $eta  = intval($_POST['eta']);  // converti in intero

  echo "Nome: $nome, Età: $eta";
?>

WARNING

Non fidarti mai dei dati provenienti dall’utente. Usa sempre htmlspecialchars() per le stringhe e intval() / floatval() per i numeri.

11. Esercizi

  1. Crea una pagina PHP che legga un nome dall’URL (?nome=...) e mostri un messaggio di benvenuto personalizzato.
  2. Usando $_SERVER['HTTP_USER_AGENT'], mostra il browser con cui l’utente sta navigando.
  3. Scrivi uno script che avvii una sessione, salvi un messaggio e lo mostri in una seconda pagina (simulando la navigazione).
  4. Crea un cookie che ricordi la lingua preferita dell’utente per 30 giorni. Leggi e mostra il valore nella stessa pagina.
  5. Spiega con parole tue la differenza tra $_GET e $_POST, e quando usare $_SESSION invece dei cookie.

12. Quiz a risposta multipla

1) Le variabili superglobali sono disponibili:

2) Quale superglobale contiene i dati visibili nell'URL?

3) Quale funzione bisogna chiamare prima di usare $_SESSION?

4) Dove vengono salvati i dati di sessione?

5) Quale funzione si usa per salvare un cookie?

6) Quale superglobale contiene informazioni sul browser dell'utente?

7) Perché usare htmlspecialchars() sui dati ricevuti dall'utente?

8) Quale superglobale gestisce i file caricati da un form?

Prenota una lezione