Superglobales / Cookies / Sessions

Superglobales

Ce sont des tableaux concernant pour l’essentiel le protocole HTTP ou la gestion de Cookies ou des Sessions.

Leur contenu est :

  • soit défini par l’utilisateur pr l’intermédiaire de fonctions spécifiques (→ $_COOKIE[ ])

  • soit défini directement par l’interpréteur PHP

Parmi les superglobales, on trouve :

  • $_GET[ ], $_POST[ ] ou $_REQUEST[ ] qui englobe les 2

  • $_SERVER[ ] : Variables décrivant le client ou la page courante

  • $_GLOBALS[ ] variables globales

  • $_COOKIE[ ] pour les cookies

  • $_SESSION[ ] pour les sessions

demo.php
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <h1>Superglobale <code>$_GET[]</code></h1>
    <?php
    echo '$_GET : ';
    var_dump($_GET);
    ?>

    <table border="1px">

        <tr>
            <th>Variable</th>
            <th>Valeur</th>
        </tr>

        <?php foreach ($_GET as $key => $value): ?>
        <tr>
            <td><?php echo $key ?></td>
            <td><?php echo $value ?></td>
        </tr>
        <?php endforeach; ?>

    </table>

</body>
</html>
superglobales

Cookies

Le cookie permet à l’administrateur d’un site de stocker des informations chez le client.

Il est stocké pour une durée donnée dans une BDD gérée par le navigateur . (→ Ex. Firefox : C:\Users\claud\AppData\Roaming\Mozilla\Firefox\Profiles\n5rf24ri.default-release\cookies.sqlite)

seq cookies
demo-cookie.php
<?php
    $cookie_name = "user";
    $cookie_value = "John Doe";
    setcookie($cookie_name, $cookie_value, time() + (86400), "/"); // 86400s = 1 jour
?>
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <?php
        if(!isset($_COOKIE[$cookie_name])) {
            echo "Le cookie nommé '" . $cookie_name . "' n'est pas défini !";
        } else {
           echo "Le cookie '" . $cookie_name . "' est défini<br>";
           echo "Sa valeur est : " . $_COOKIE[$cookie_name];
        }
    ?>

</body>
</html>

Lors du 1er accès au fichier php, l’entête HTTP de la réponse contient :

HTTP/1.1 200 OK
Date: Mon, 15 Apr 2024 11:48:47 GMT
Server: Apache/2.4.56 (Win64) OpenSSL/1.1.1t PHP/8.2.4
X-Powered-By: PHP/8.2.4
Set-Cookie: user=John%20Doe; expires=Tue, 16 Apr 2024 11:48:47 GMT; Max-Age=86400; path=/  (1)
Content-Length: 258
Keep-Alive: timeout=5, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=UTF-8{
1 Définition du cookie

Lors des accès suivants, l’entête HTTP de la requête contient :

GET /~claud/demo-cookie.php HTTP/1.1
Host: localhost
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,/;q=0.8
Accept-Language: fr,fr-FR;q=0.8,en-US;q=0.5,en;q=0.3
Accept-Encoding: gzip, deflate, br
Connection: keep-alive
Cookie: user=John%20Doe  (1)
Upgrade-Insecure-Requests: 1
Sec-Fetch-Dest: document
Sec-Fetch-Mode: navigate
Sec-Fetch-Site: none
Sec-Fetch-User: ?1
1 valeur du cookie

Sessions

Pour mémoriser une information disponible sur l’ensemble des pages de votre site, nous avons vu qu’il existait les cookies.

L’inconvénient des cookies est leur manque de sécurité.

En effet, étant donné qu’ils sont enregistrés sur le disque de l’utilisateur, n’importe qui peut visualiser leur contenu.

Les sessions sont le moyen de pallier cette faille en enregistrant les données côté serveur et non côté client.

Ces données sont alors accessibles à l’ensemble des pages de votre site via la superglobale $_SESSION[].

L’inconvénient des sessions est qu’elles ne permettent pas de récupérer l’information d’une session précédente, à l’inverse des cookies.

► Exemple d’une session PHP classique :

demo session

► Code source correspondant :

page1.php – Démarrage de la session et initialisation des variables de session
<?php
session_start(); // Démarre ou reprend la session existante

// Initialisation de variables de session
$_SESSION['utilisateur'] = 'Ragnar';
$_SESSION['connecte'] = true;
$_SESSION['heure_connexion'] = time();

echo 'Bienvenue ' . $_SESSION['utilisateur'] . '<br>';
echo '<a href="page2.php">Aller à la page 2</a>';
?>
page2.php – Lecture et utilisation des variables de session
<?php
session_start(); // Reprend la session existante

if (isset($_SESSION['utilisateur']) && $_SESSION['connecte']) {
    echo 'Bonjour ' . $_SESSION['utilisateur'] . ', vous êtes connecté depuis ' .
         date('H:i:s', $_SESSION['heure_connexion']) . '<br>';
    echo '<a href="page3.php">Se déconnecter</a>';
} else {
    echo 'Session expirée ou non connectée.<br>';
    echo '<a href="page1.php">Retour à la page 1</a>';
}
?>
page3.php – Déconnexion et destruction de la session
<?php
session_start(); // Reprend la session existante

// Suppression de toutes les variables de session
$_SESSION = array();

// Suppression du cookie de session si nécessaire
if (ini_get("session.use_cookies")) {
    $params = session_get_cookie_params();
    setcookie(session_name(), '', time() - 42000,
        $params["path"], $params["domain"],
        $params["secure"], $params["httponly"]
    );
}

// Destruction de la session
session_destroy();

echo 'Vous êtes déconnecté.<br>';
echo '<a href="page1.php">Retour à la page 1</a>';
?>

🞄  🞄  🞄