PHP - Sessioni

Un modo alternativo per rendere i dati accessibili attraverso le varie pagine di un intero sito web è usare una sessione PHP.

Una sessione crea un file in una directory temporanea sul server in cui sono archiviate le variabili di sessione registrate ei relativi valori. Questi dati saranno disponibili per tutte le pagine del sito durante quella visita.

La posizione del file temporaneo è determinata da un'impostazione in php.ini file chiamato session.save_path. Prima di utilizzare qualsiasi variabile di sessione, assicurati di aver impostato questo percorso.

Quando una sessione viene avviata, accadono le seguenti cose:

  • PHP crea prima un identificatore univoco per quella particolare sessione che è una stringa casuale di 32 numeri esadecimali come 3c7foj34c3jj973hjkop2fc937e3443.

  • Un cookie chiamato PHPSESSID viene automaticamente inviato al computer dell'utente per memorizzare la stringa di identificazione della sessione univoca.

  • Un file viene creato automaticamente sul server nella directory temporanea designata e porta il nome dell'identificatore univoco prefissato da sess_ ie sess_3c7foj34c3jj973hjkop2fc937e3443.

Quando uno script PHP vuole recuperare il valore da una variabile di sessione, PHP ottiene automaticamente la stringa identificativa di sessione univoca dal cookie PHPSESSID e quindi cerca nella sua directory temporanea il file con quel nome e una convalida può essere eseguita confrontando entrambi i valori.

Una sessione termina quando l'utente perde il browser o dopo aver lasciato il sito, il server terminerà la sessione dopo un periodo di tempo predeterminato, comunemente di 30 minuti.

Avvio di una sessione PHP

Una sessione PHP viene avviata facilmente effettuando una chiamata al file session_start()Questa funzione controlla prima se una sessione è già iniziata e se non ne è stata avviata nessuna, ne avvia una. Si consiglia di mettere la chiamata asession_start() all'inizio della pagina.

Le variabili di sessione vengono memorizzate in un array associativo chiamato $_SESSION[]. È possibile accedere a queste variabili durante la durata di una sessione.

Il seguente esempio avvia una sessione, quindi registra una variabile chiamata counter che viene incrementato ogni volta che la pagina viene visitata durante la sessione.

Utilizzare isset() funzione per verificare se la variabile di sessione è già impostata o meno.

Metti questo codice in un file test.php e carica questo file molte volte per vedere il risultato -

<?php
   session_start();
   
   if( isset( $_SESSION['counter'] ) ) {
      $_SESSION['counter'] += 1;
   }else {
      $_SESSION['counter'] = 1;
   }
	
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
?>

<html>
   
   <head>
      <title>Setting up a PHP session</title>
   </head>
   
   <body>
      <?php  echo ( $msg ); ?>
   </body>
   
</html>

Produrrà il seguente risultato:

You have visited this page 1in this session.

Distruggere una sessione PHP

Una sessione PHP può essere distrutta da session_destroy()funzione. Questa funzione non necessita di alcun argomento e una singola chiamata può distruggere tutte le variabili di sessione. Se vuoi distruggere una singola variabile di sessione, puoi usareunset() funzione per annullare l'impostazione di una variabile di sessione.

Ecco l'esempio per annullare l'impostazione di una singola variabile:

<?php
   unset($_SESSION['counter']);
?>

Ecco la chiamata che distruggerà tutte le variabili di sessione -

<?php
   session_destroy();
?>

Attivazione della sessione automatica

Non è necessario chiamare la funzione start_session () per avviare una sessione quando un utente visita il tuo sito, se puoi impostare session.auto_start variabile a 1 in php.ini file.

Sessioni senza cookie

Potrebbe esserci un caso in cui un utente non consente di memorizzare i cookie sul proprio computer. Quindi esiste un altro metodo per inviare l'ID di sessione al browser.

In alternativa, è possibile utilizzare il SID costante definito se la sessione è iniziata. Se il client non ha inviato un cookie di sessione appropriato, ha la forma session_name = session_id. In caso contrario, si espande in una stringa vuota. Pertanto, puoi incorporarlo incondizionatamente negli URL.

L'esempio seguente mostra come registrare una variabile e come collegarsi correttamente a un'altra pagina utilizzando SID.

<?php
   session_start();
   
   if (isset($_SESSION['counter'])) {
      $_SESSION['counter'] = 1;
   }else {
      $_SESSION['counter']++;
   }
   
   $msg = "You have visited this page ".  $_SESSION['counter'];
   $msg .= "in this session.";
   
   echo ( $msg );
?>

<p>
   To continue  click following link <br />
   
   <a  href = "nextpage.php?<?php echo htmlspecialchars(SID); ?>">
</p>

Produrrà il seguente risultato:

You have visited this page 1in this session.
To continue click following link

Il htmlspecialchars() può essere utilizzato durante la stampa del SID per prevenire attacchi correlati a XSS.