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
<!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>
Résultat d’exécution avec l’URL http://localhost/~claud/demo.php?nom=Lothbrok&pr%C3%A9nom=Ragnar&pays=Danemark :
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
)
<?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 :
► 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>';
?>
🞄 🞄 🞄