Tutoriel PHP

PHP

Découvez les bases de PHP dans mon support de formation dédié à ce puissant langage orienté web.


HTML HTML5 CSS Dreamweaver Bootstrap

Les sessions

Dans ce tutoriel, nous abordons les SESSIONS en PHP.

Les sessions en PHP permettent de sauvegarder des variables de page en page pendant une certaine durée prédéfinie par PHP (et modifiable bien entendu).

Chaque utilisateur ayant besoin des sessions se voit attribuer un identifiant unique appelé ID de session. Cet identifiant est stocké sur le poste de l'internaute sous forme d'un cookie ou transite via l'URL si l'option session.use_trans_sid est à 1 (ou On) dans le fichier php.ini.

Utiliser la méthode du cookie est plus que recommandée : un identifiant de session dans l'URL empêche de retenir l'adresse d'une page simplement par le visiteur néophyte, cela rallonge donc l'adresse de votre page. Cela nuit également au référencement de votre page. En effet, l'identifiant étant unique, lorsque le robot du moteur de recherche scanne votre site, il ne retombera jamais sur la même URL plusieurs fois de suite.

Démarrer une session avec session_start

Avant d'utiliser les sessions sur une page, on doit toujours utiliser la fonction session_start() placée avant tout envoi de code HTML, et donc généralement tout en haut de votre page PHP :

session_start()

Syntaxe pour créer une variable de session

$_SESSION['nom']="Valeur"

<?php
session_start(); // On démarre la session AVANT toute chose,
// On crée dans cette exemple 3 variables de session :
$_SESSION['prenom'] = 'Jean';
$_SESSION['nom'] = 'Dupont';
$_SESSION['age'] = 24;
// Maintenant on peut taper du code HTML
?>

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Variables de session</title>
<meta name="description" content="Je teste les variables de sessio en PHP">
<!--[if IE]>
<script src="https://cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/respond.js/1.4.2/respond.min.js"></script>
<![endif]-->
<body>
<p>Bonjour <?php echo $_SESSION['prenom']; ?>!</p>>
<p>Tu es à l'accueil de mon site </p>
</body>
</html>
Pourquoi session_start() doit-elle être placée de la sorte ? et bien parce que si PHP utilise les cookies pour repérer quel est l'id de session utilisé par l'internaute, il va écrire cet id de session dans un cookie. Or, le protocole HTTP fonctionne de telle sorte que les en-têtes (qui permettent de dire à votre navigateur "crée un cookie ayant tel nom et telle valeur") sont envoyés avant le premier caractére HTML transmis.
Cela veut dire que dés que vous transmettrez un caractére HTML, les en-têtes seront envoyés et vous ne pourrez plus les modifier, vous ne pourrez donc plus écrire le cookie de session.
En général, si vous faites une maladresse de ce style, vous vous retrouverez avec une erreur de headers already sent.

Quelle est la durée de vie d'une session ?

Dés que l'on ferme le navigateur la session est détruite.
Sauf à configurer le fichier php.ini avec session.lifetime qui fixe la durée de vie, en secondes, du cookie envoyé au client. La valeur 0 signifie "jusqu'à ce que le client soit fermé". Par défaut à 0.
Donc si on le laisse à zéro la session dure jusqu'à la fermeture du navigateur, pour laisser les données durant 30 minutes, il faut remplacer 0 par 1800 (= 30 minutes * 60 secondes dans une minute).
session.lifetime = 0

Afficher l'identifiant de session avec id_session

Lit et/ou modifie l'identifiant courant de session

echo session_id()

Supprimer une variable de session

La commande session_unregister() supprime une variable dans la session courante.
Elle retourne TRUE si success, FALSE sinon.
Elle a pour syntaxe :

boolean session_unregister (string name)

Il est aussi possible de purger toutes les variables de la session avec

session_unset()

Si vous utilisez le tableau superglobale $_SESSION, il suffit alors d'utiliser unset() :

unset($_SESSION["mavariable"])

Fermer une session

1- Fermeture conservatrice avec session_write_close

La commande session_write_close() écrit les valeurs des variables de session sur le serveur et ferme la session.

session_write_close()

2- Fermeture destructive avec session_destroy

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()

La commande session_destroy() détruit toutes les données enregistrées d'une session.
Cette derniére commande est la plus utilisée car n'impose aucune sauvegarde au serveur. Retourne TRUE en cas de succés, et FALSE sinon.

session_ destroy()

Exercice : transmettre des variables de pages en pages

Exercice : formulaire de connection