Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zér0 > Les tutoriels > Officiels > Site Web > Lecture du tutoriel

Les variables superglobales

Avatar
Auteur : M@teo21
Créé : le 26/08/2005 00:31:26
Modifié : le 26/02/2007 19:24:00
Noter et commenter ce tutoriel
Imprimer ce tutoriel
Dans ce chapitre, nous allons travailler sur ce qu'on appelle les variables "superglobales".
A votre niveau, il devient important de savoir qui elles sont et comment on peut les utiliser. Vos scripts vont énormément gagner en puissance grâce à ces variables.

Nous allons travailler dans cet ordre :

Bonne lecture ! :)
Sommaire du chapitre :
Chapitre précédent Sommaire Chapitre suivant

Présentation des superglobales

Je vais vous en apprendre une bien bonne : vous avez déjà manipulé des variables superglobales... sans le savoir.

Ces variables un peu "spéciales" sont faciles à reconnaître. Voici 3 points pour les identifier :

Le mot "global" en PHP signifie que la variable est accessible partout.
Une variable créée dans une fonction par exemple n'est pas accessible partout. Elle n'existe que dans la fonction. Une variable dite globale est accessible partout dans votre code (au début, à la fin...)

Bien, maintenant que vous savez les repérer, que diriez-vous si je vous listais toutes les superglobales qui existent en PHP ?
Il existe d'autres superglobales en PHP, en plus de $_GET et $_POST. Soyons francs : il y en a qui vont beaucoup nous intéresser, mais il y en a aussi qu'on ne touchera jamais ;)

En clair, si je résume : on connaît déjà $_GET et $_POST, on retient que $_SERVER['REMOTE_ADDR'] donne l'adresse IP du visiteur, et on se prépare à étudier $_SESSION et $_COOKIE dans la suite de ce chapitre ^^

Les sessions

Les sessions sont un moyen de conserver des variables sur toutes les pages de votre site.
Jusqu'ici, on était arrivés à passer des variables de page en page via la méthode GET (en modifiant l'url : page.php?variable=valeur) et via la méthode POST (un formulaire quoi).

Mais si on veut transmettre une ou plusieurs variables sur TOUTES les pages de son site, c'est vraiment la galère avec GET et POST... D'où l'invention des sessions.

Comment ça marche ?
  1. Un visiteur se connecte. On demande à créer une session pour lui : PHP génère un numéro. Pour cela, on utilise la fonction session_start(). Ce numéro est souvent très gros et écrit en hexadécimal. Par exemple : a02bbffc6198e6e0cc2715047bc3766f

    Ce numéro sert d'identifiant et est appelé "ID de session" (ou PHPSESSID). PHP transmet automatiquement cet ID de page en page en utilisant un cookie ou via l'url (ex : mapage.php?PHPSESSID=a02bbffc6198e6e0cc2715047bc3766f).
  2. A partir de là, c'est du tout bon : on peut créer une infinité de variables de session. Par exemple : $_SESSION['login'] contient le login du visiteur, $_SESSION['password'] contient le mot de passe etc...
    L'avantage, c'est que le serveur conserve ces variables même lorsque la page PHP a fini d'être générée. Ce qui veut dire que, quelle que soit la page de votre site, vous pourrez récupérer par exemple le login et le mot de passe du visiteur !
  3. Lorsque le visiteur se déconnecte (il a cliqué sur un bouton "Déconnecter" ou est resté inactif trop longtemps), alors la session est fermée avec session_destroy()

Ca a l'air compliqué comme ça, mais en fait c'est d'une simplicité à en pleurer :lol:

Le seul truc qu'il ne faut pas oublier de faire, c'est d'appeler session_start() sur chacune de vos pages AVANT d'écrire le moindre code HTML.
Si vous oubliez session_start(), vous ne pourrez pas accéder aux variables superglobales $_SESSION.

Faites très attention : appelez session_start tout au début de vos pages PHP. Ne mettez la balise <html> qu'après, sinon vous aurez des problèmes avec votre session.

Après, vous pouvez utiliser les variables $_SESSION comme des variables normales.
Un petit exemple ? :)

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
<?php
session_start(); // On démarre la session AVANT toute chose
 
// On s'amuse à créer quelques variables de session :
$_SESSION['prenom'] = 'Jean';
$_SESSION['nom'] = 'Dupont';
$_SESSION['age'] = 24;
 
// Maintenant que le session_start est fait, on peut taper du code HTML
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Titre de ma page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
 
    <p>
        Salut <?php echo $_SESSION['prenom']; ?> !<br />
        Tu es à l'accueil de mon site (index.php). Tu veux aller sur une autre page ?
    </p>
    
    <p>
        <a href="mapage.php">Lien vers mapage.php</a><br />
        <a href="monscript.php">Lien vers monscript.php</a><br />
        <a href="informations.php">Lien vers informations.php</a>
    </p>
 
    </body>
</html>



Ne vous y trompez pas : on peut créer des variables de session n'importe où dans le code. Ici je les ai créé en haut de la page, mais j'aurais pu le faire ailleurs.
La seule chose qui importe, c'est que le session_start() soit fait au tout début de la page.

Notez quelque chose de très important : mes liens sont tous simples. Je ne m'occupe de rien : ni de transmettre le nom, prénom, âge du visiteur, ni de transmettre l'ID de session.

Et ça, croyez-moi, c'est génial :D
Quand votre site sera un peu gros et qu'il y aura plein de liens partout, vous apprécierez de savoir que PHP s'occupe tout seul de transmettre les variables !

En effet, sur chacune des pages "mapage.php", "monscript.php", "informations.php" (et n'importe quelle autre page de votre site), vous retrouverez les variables $_SESSION['prenom'], $_SESSION['nom'] et $_SESSION['age'] !

Voici par exemple le code source de la page informations.php :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
session_start(); // On démarre la session AVANT toute chose
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Titre de ma page</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
 
    <p>Re-bonjour !</p>
 
    <p>
        Je me souviens de toi ! Tu t'appelles <?php echo $_SESSION['prenom'] . ' ' . $_SESSION['nom']; ?> !<br />
        Et ton âge hummm... Tu as <?php echo $_SESSION['age']; ?> ans, c'est ça ? :-D
    </p>
    
    </body>
</html>



Vous voyez ? On a juste fait un session_start(), puis on s'est amusés à afficher les valeurs des variables de session.
Et là, magie ! :magicien:
Les valeurs des variables avaient été conservées, on n'a rien eu à faire !

En résumé, vous créez des variables de session comme vous créeriez des variables normales, sauf que vous mettez le préfixe $_SESSION devant pour que PHP sache qu'il doit "retenir" ces variables sur toutes les pages :)

Enfin, si vous voulez détruire la session du visiteur, vous pouvez faire un lien "Déconnexion" qui amène vers une page qui fait appel à la fonction session_destroy()
Quoiqu'il en soit, la session sera automatiquement détruite au bout d'un certain temps d'inactivité.

Et voilà, vous savez tout ce qu'il faut, ce n'est vraiment pas bien compliqué :)

Concrètement, les sessions peuvent servir pour :

Si votre site est hébergé chez Free.fr, vous devrez créer un dossier appelé "sessions" à la racine de votre FTP pour activer les sessions.


Je vais m'arrêter là pour les explications sur les sessions... En effet, avec ça vous savez tout ce qu'il faut.

Bien, on passe aux cookies maintenant :D

Les cookies

Travailler avec des cookies est quasiment aussi simple que de travailler avec des sessions.
Il faut dire que PHP fait fort grâce aux superglobales, vous allez le voir une fois de plus ;)

Voici le plan que nous allons suivre :
  1. On va voir ce que c'est un cookie exactement... parce que je sais pas vous mais moi j'ai horreur de travailler sur des choses abstraites :p
  2. Ensuite, nous verrons comment écrire un cookie. C'est facile à faire, si on respecte un ou deux points.
  3. Enfin, nous verrons comment afficher le contenu d'un cookie. Ca c'est super facile à faire :D


Qu'est-ce qu'un cookie ?



Un cookie, c'est un petit fichier que l'on enregistre sur l'ordinateur du visiteur.
Ce fichier contient du texte et permet de "retenir" des informations sur le visiteur. Par exemple, vous inscrivez dans un cookie le pseudo du visiteur, comme ça la prochaine fois qu'il viendra sur votre site vous pourrez lire son pseudo en allant regarder ce que son cookie contient.

On fait souvent l'erreur de penser que les cookies sont "dangereux". Non, ce ne sont pas des virus, juste des petits fichiers textes qui permettent de retenir des informations.
Au pire, un site marchand peut retenir que vous aimez les appareils photos numériques et vous afficher uniquement des pubs pour des appareils photos, mais en aucun cas un cookie peut scanner votre disque dur ou le formater, rassurez-vous ils sont inoffensifs :lol:

Un cookie est créé pour chaque nouveau site web qui le demande. Ainsi, si vous êtes allés voir 3 sites web, vous pouvez avoir jusqu'à 3 cookies.

Chaque cookie peut contenir plusieurs informations.

Où sont stockés les cookies sur mon disque dur ?

Ca dépend de votre navigateur. Par exemple, Internet Explorer les stocke dans le dossier "Temporary Internet Files" :

Image utilisateur


Si vous vous amusez à en ouvrir un, vous verrez probablement quelque chose d'incompréhensible :

Image utilisateur


Sinon, si vous avez Mozilla Firefox, c'est un peu plus clair : menu Outils / Options / Vie privée / Cookies stockés. Là vous avez la liste et la valeur de tous les cookies stockés :

Image utilisateur


Eh bah vous savez quoi ? On s'en fout de tout ça ;)
On n'a pas à se préoccuper de tout ça, je vous le montrais juste pour que vous sachiez à quoi vous avez affaire. Comme d'habitude, PHP se charge de tout :)

Ecrire un cookie



Comme une variable, on écrit un cookie en donnant son nom et sa valeur.
Par exemple, le cookie "pseudo" aurait chez moi la valeur "M@teo21".

Pour écrire un cookie, on utilise la fonction PHP setcookie (qui signifie "Placer un cookie" en anglais).
On lui donne en général 3 paramètres, dans l'ordre suivant :

  1. Le nom du cookie (ex : "pseudo")
  2. La valeur du cookie (ex : "M@teo21")
  3. La date d'expiration du cookie, sous forme de timestamp (ex : 1090521508)
    Si vous ne savez pas ce qu'est un timestamp, c'est que vous n'avez pas lu le chapitre sur les dates :p

Comme vous pouvez le voir, un cookie a une durée de vie limitée.
Il est automatiquement "supprimé" au bout d'un certain temps.

Si vous voulez supprimer le cookie dans un an, il vous faudra faire :
time() + 365*24*3600
Cela veut dire : timestamp actuel + nombre de secondes dans une année. Cela aura pour effet de voir votre cookie disparaître dans exactement un an.

Vous pouvez aussi utiliser la fonction mktime comme on l'a vu dans le chapitre sur les dates pour effacer le cookie à une date précise.

Toutefois, il y a un petit problème avec setcookie... Comme pour session_start, cette fonction ne marche QUE si vous la mettez avant tout code HTML (donc avant la balise <!DOCTYPE>)
Ca peut paraître bizarre, je le reconnais. Ce n'est pas du tout la faute à PHP, c'est comme ça que les cookies fonctionnent.

Ne placez donc JAMAIS le moindre code HTML avant d'utiliser setcookie.
La plupart des gens qui ont des problèmes avec setcookie ont fait cette erreur, donc souvenez-vous en !

Voyons maintenant comment je ferais pour inscrire 2 cookies : un qui retient mon pseudo pendant un an, et un autre qui retient le nom de mon pays :

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
<?php
$timestamp_expire = time() + 365*24*3600; // Le cookie expirera dans un an
setcookie('pseudo', 'M@teo21', $timestamp_expire); // On écrit un cookie
setcookie('pays', 'France', $timestamp_expire); // On écrit un autre cookie...

// Et SEULEMENT MAINTENANT, on peut commencer à écrire du code html
?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
   <head>
       <title>Ma super page PHP</title>
        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
    </head>
    <body>
    
    ... etc etc...


Et voilà, les cookies sont écrits ! :D
Il m'a donc fallu faire 2 setcookie pour écrire ces 2 informations.

Afficher un cookie



Ca, c'est vraiment le plus simple.
Avant de commencer à travailler sur une page, PHP lit les cookies du client pour récupérer toutes les informations qu'il y a dedans. Ces informations sont placées dans la superglobale $_COOKIE, sous forme d'array (tableau) comme d'habitude.

Ce qui fait que, si je veux ressortir le pseudo du visiteur que j'avais inscrit dans un cookie, il suffirait d'écrire :
$_COOKIE['pseudo']

Ce qui nous donne un code PHP tout bête pour réafficher le pseudo du visiteur :

Code : PHP
1
2
3
4
<p>
    Hé ! Je me souviens de toi !<br />
    Tu t'appelles <?php echo $_COOKIE['pseudo']; ?> et tu viens de <?php echo $_COOKIE['pays']; ?> c'est bien &#231;a ?
</p>


Comme vous le voyez encore une fois, le gros avantage c'est que les superglobales sont accessibles partout.
Vous avez besoin de savoir ce que contient le cookie "pseudo" ? Affichez donc le contenu de la superglobale $_COOKIE['pseudo'] ! :D

A noter que si le cookie n'existe pas, la variable superglobale n'existe pas.
Plus précisément, si vous faites un isset sur $_COOKIE['pseudo'] comme on a appris à le faire jusqu'ici, la condition (if isset($_COOKIE['machintruc'])...) vous répondra que la variable n'existe pas... ce qui veut donc dire que le cookie n'existe pas ;)

Enfin, vous vous demandez peut-être comment modifier un cookie déjà existant ?
C'est là encore très simple : il faut refaire un setcookie en gardant le même nom de cookie. Cela "écrasera" l'ancien cookie. Par exemple, si j'habite maintenant en Chine, je ferai :
setcookie('pays', 'Chine', $timestamp_expire);

Notez qu'alors le temps d'expiration du cookie est remis à zéro pour un an. On aurait donc encore un an avant que le cookie disparaisse ^^

Q.C.M.

Laquelle de ces variables ne peut pas être une superglobale ?
$_FILES contient des informations sur...
Que contient $_SERVER['REMOTE_ADDR'] ?
Quelle est la particularité de setcookie ?
Quelle fonction doit être obligatoirement appelée avant d'utiliser des variables de session ?


PHP vous offre beaucoup de puissance avec les superglobales, et vous allez voir qu'on ne va pas se faire prier pour s'en servir ;)

On va réutiliser dans le TP qui suit ce que vous venez d'apprendre (récupérer l'IP, manipuler des cookies etc...).
Ce chapitre était donc plutôt théorique... que diriez-vous de passer à la pratique ? :D
Chapitre précédent Sommaire Chapitre suivant
Auteur : M@teo21
Noter et commenter ce tutoriel
Imprimer ce tutoriel

Nombre de connectés 780 Zér0s connectés | Requêtes SQL 10 requêtes | Temps de génération de la page 0.1258s (0.0906s)

Changer de design - Revue de presse - En savoir plus - Plan du site
Nous contacter - Mentions légales - Publicité
Politique d'accessibilité - Fil RSS - XHTML 1.0 - CSS 2.0

Y'a plus rien à lire, faut remonter maintenant !