Les variables de session sont chargées dans une session par l'intermédiaire de la fonction session_register.
<?php session_start(); ... session_register("nom_variable"); ... session_register("nom_variableN"); ?>
Cette fonction n'enregistre pas la valeur d'une variable dans un fichier de session. Elle permet seulement de déclarer une variable de session dans laquelle une valeur pourra transiter au travers de la session en cours.
Deux options de configuration déterminent le traitement des variables d'une session dans une application PHP.
Si l'option de configuration track_vars est activée et register_globals désactivée, les variables de la session seront disponibles seulement à partir du tableau associatif global $HTTP_SESSION_VARS ou plus récemment $_SESSION.
session_register("nom_variable"); ... echo $HTTP_SESSION_VARS["nom_variable"]; //ou directement echo $_SESSION["nom_variable"];
En effet, avec $_SESSION, il n'est pas nécessaire d'utiliser les fonctions session_register(), session_unregister() et session_is_registered(). Les variables de sessions sont accessibles comme toute autre variable.
Si l'option de configuration register_globals est activée, les variables de la session seront disponibles à partir des variables globales correspondantes. Mais ceci n'est pas recommandé pour des raisons de sécurité.
session_register("nom_variable"); ... echo $nom_variable;
Si les options track_vars et register_globals sont activées, les variables globales et $HTTP_SESSION_VARS ou $_SESSION contiendront les valeurs des variables de la session en cours.
Le déchargement d'une variable de session s'accomplit par l'intermédiaire de la fonction unset() ou session_unregister() selon que l'option register_globals soit respectivement inactive ou active.
<?php session_start(); //l'option register_globals est inactive if(isset($_SESSION['variable'])) unset($_SESSION['variable']); //l'option register_globals est active if(session_is_registered('variable')) session_unregister('variable'); ?>
Le transport des informations entre les documents est réalisé par l'entremise soit d'un cookie, soit d'une requête HTTP. La dernière solution semble être la plus fiable puisque les cookies peuvent ne pas être acceptés par le client ou celui-ci pourrait les détruire en cours de session.
$Session_ID = session_id(); $nom_session = session_name(); $adresse = 'http://www.site.com/doc.html'; $lien = 'Le prochain document'; print_f('<a href="%s?%s=%s">%s</a>', $adresse_url, $nom_session, $Session_ID, $lien); echo '<a href="' . $adresse_url . SID . '">' . $lien . '</a>' /* affichent <a href="http://www.site.com/
doc.html?PHPSESSID=7edf48ca359ee24dbc5b3f6ed2557e90">
Le prochain document
</a> */ // redirection automatique header("Location:" . "$adresse . "?" . SID);
Il suffit donc simplement de concaténer l'identifiant de session à l'adresse URL de la page cible pour que cette dernière puisse accéder aux informations conservées par la session. De plus, un mot-clé spéciale SID contient le nom de session et l'identifiant séparé par un signe égal.
Si la directive de compilation --enable-trans-sid est activée, il sera possible de ne pas ajouter l'identifiant de session à l'adresse URL pointée. Pour savoir si cela est le cas, il suffit de rechercher la directive dans la page résultant de la fonction phpinfo ou sinon de modifier l'option de configuration session.use_trans_sid dans php.ini.
[Session] session.use_trans_sid = 1
Par défaut, PHP tente de passer par les cookies pour sauvegarder l'identifiant de session dans le cas où le client les accepterait. Pour éviter cela, il suffit de désactiver l'option de configuration session.use_cookies dans le fichier php.ini.
[Session] session.use_cookies = 0 ; désactive la gestion des sessions par cookie
Dans la situation ou il serait nécessaire d'utiliser les cookies, il est impératif de doubler les moyens de conservation du SID.
Exemple [voir]<!-- Fichier : formulaire.html --> <html> <body> <form method="post" action="traitement.php"> <table border="0"> <tr> <td><u>Nom :</u></td> <td> <input type="text" name="cNom" size="20" value="RIVES"> </td> </tr> <tr> <td><u>Prénom :</u></td> <td> <input type="text" name="cPrenom" size="20" value="Jean-Pierre"> </td> </tr> <tr> <td><u>eMail :</u></td> <td> <input type="text" name="cEmail" size="20" value="j_p.rives@domaine.com"> </td> </tr> <tr> <td> </td> <td> <input type="submit" name="soumettre" value="Envoyer"> </td> </tr> </table> </form> </body> </html> <!-- Fichier : traitement.php --> <? session_start(); $nom = $cNom; $prenom = $cPrenom; $email = $cEmail; session_register("nom"); session_register("prenom"); session_register("email"); header("Location: session.php?" . session_name() . "=". session_id()); ?> <!-- Fichier : session.php --> <? session_start(); ?> <html> <body> <? echo("<u>Identifiant de session :</u> <b>" . session_id() . "</b><br>"); echo("<u>Nom de la session :</u> <b>" . session_name() . "</b><br><br>"); echo("<u>Nom :</u> <b>". $nom . "</b><br>"); echo("<u>Prénom :</u> <b>" . $prenom . "</b><br>"); echo("<u>eMail :</u> <b>" . $email . "</b><br>"); ?> </body> </html> <? session_destroy(); ?> |