Voir également : interaction des sessions et des formulaires
Lorsqu'il s'agit de passer des paramètres de page en page, on peut utiliser des champs texte ou Hidden provenant d'un formulaire. Le principal inconvénient de cette manière de faire est que dans la barre d'adresse, les paramètres sont visibles à tout le monde, comme ceci :
http://www.nimportequoi.com/unepagequelconque?MotDePasse=PolluX007
Lorsqu'il s'agit ensuite de naviguer de page en page en gardant en mémoire les paramètres, il faut à nouveau utiliser le même système, ce qui évidemment empêche la confidentialité !
L'autre manière de conserver des données est l'utiliusation de cookies, qui permettent carrément le stockage directement sur le PC du visiteur. Certaines personnes désactivent les cookies sur leur ordinateur, ce qui empêche une utilisation sûre.
Le meilleur compromis est donc la session.
La session va nous permettre de passer des variables de page en page sans que jamais on voit dans la barre d'adresse de quelle variable il s'agit, ni son contenu.
Imaginons une page : index.php, qui possède un lien vers suite.php, en lui passant discrètement une variable $login qui contient Julien, et de MotDePasse qui contient PolluX19 :
<?
session_start();
?>
<HTML>
<HEAD>
</HEAD>
<BODY>
<a href="suite.php">Suite</a>
<?
$login = "Julien";
$MotDePasse = "PolluX19";
session_register
("login");
session_register
("MotDePasse");
?>
</BODY>
</HTML>
Le session_start(); doit impérativement se placer en tout début de page, sinon, une erreur PHP est générée.La suite est facile à comprendre : les variables qu'on désire conserver et donc passer à d'autres pages sont stockées dans la session avec session_register. Constatez que même si le lien hypertexte se trouve physiquement avant les session_register, elles se passent quand même normalement.
Lorsqu'on clique sur "Suite", on ne voit absolument
pas le contenu des variables ainsi passées, quoique certaines fois, je
vois dans la barre d'adresse
http://www.trucmachin.com/fin.php?PHPSESSID=fcd28fb74ab870744ce2d0ca84c48a1c
<?
session_start();
?>
<html>
<head></head>
<body>
<a href="fin.php">Fin</a>
<?
echo $login."<BR>";
// Julien
echo $MotDePasse; // PolluX19
?>
</body>
</html>
J'ai rajouté encore un lien dans suite.php qui pointe vers fin.php, pour illustrer le fait qu'il n'est pas nécessaire de rafraîchir les variables avec une nouvelle session_register.
<?
session_start();
?>
<html>
<head>
</head>
<body>
<?
echo $login."<BR>";//
Julien
echo $MotDePasse;//
PolluX19
?>
</body>
</html>
Evidemment, si on essae d'ouvrir une nouvelle fois le navigateur et qu'on tape directement dans la barre d'adresse d'adresse de la page fin.php, les variables sont perdues. Par contre, dans index.php, si on fait SHIFT-CLIC sur le lien qui pointe vers suite.php (dans le but de l'ouvrir dans une nouvelle fenêtre, les variables sont conservées).
Il est très possible d'appeler la page sur laquelle on se trouve. L'exemple suivant incrémente la variable $Compteur à chaque recharcgement de la page (exactement comme si la page comportait un lien hypertexte qui pointe vers elle-même) :
<? session_start();
?>
<html>
<head></head>
<body>
<?
$Compteur ++;
session_register ("Compteur");
echo $Compteur;
?>
</body>
</html>
Imaginons une page sur laquelle il y a de la musique en fond, avec cette instruction (pouvant se trouver n'importe où entre les balises <BODY> et </BODY>) :
<embed height=0 src=fondsonore.mid width=0 loop='true' autostart='true'></embed>
Le but est d'avoir sur cette page un lien hypertexte "Arrêter la musique" qui pointe sur la même page, mais qui met une variable $Musique à "OFF". En fait, le but complet est d'avoir une première fois la musique en fond et un lien qui pointe vers la même page avec comme libellé "Arrêter la musique" :
<a href="cettepage.php">Arrêter
la musique</a>
<embed height=0 src=fondsonore.mid width=0 loop='true' autostart='true'></embed>
et quand on clique sur ce lien, à la place des ces deux lignes, seule la ligne suivante est affichée :
<a href="cettepage.php">Démarrer la musique</a>
Il va donc s'agir, lors du premier chargement de la page, de constater que la variable $Musique n'est pas encore définie (l'instruction isset va nous y aider), et dans ce cas, installer la ligne "musicale" et le lien "Arrêter la musique". En fait, plus précisément, il faut vérifier si $Musique est soit non définie, soit égale à "OFF".
Donc :
Comme ceci :
<? session_start();
?>
<html>
<head> </head>
<body>
<?
if (!isset($Musique) || $Musique == "ON")
{
$Musique = "OFF";
echo "<a href='sessionmusique.php'>Arreter la musique</a>";
echo "<embed height=0 src=sessionmusique.mid width=0 loop='true'
autostart='true'></embed>";
}
else
{
$Musique = "ON";
echo "<a href='sessionmusique.php'>Demarrer la musique</a>";
}
session_register ("Musique");
?>
</body>
</html>
Il est possible qu'a première vue ce code semble faux ou étrange. Pour vous assurer qu'il fonctionne correctement, cliquez ici pour voir le résultat, vous verrez la page php qui contient très exactement le code précédent.
Afin d'éviter de laisser une quelconque trace des variables, il est nécessaire de détruire les variables et la session, à l'aide de :
// On détruit
les variables de notre session
session_unset ();
// On détruit notre session
session_destroy ();
session_start
- Démarre une session
session_register
- Enregistre une variable de session
session_unregister
- Efface une variable de session
session_is_registered
- Vérifie si une variable est déclarée pour la session
en cours
session_id -
Retourne l'id de la session en cours
session_name
- Retourne le nom de la session en cours
session_unset
- Detruit toutes les variables de la session en cours
session_destroy
- Destruit la session en cours
---