Les sessions en PHP

Transcription

Les sessions en PHP
Les sessions en PHP
Frédéric Patin ([email protected])
[style]
Codes
Normal
Titre 1
Titre 2
[/style]
[chapeau]
Les sessions en PHP constituent le seul moyen sûr de suivre un utilisateur tout au long de sa visite du
site. En effet le protocole http ne prévoit aucun mécanisme qui permettrait de maintenir, au cours de
différentes requêtes, des informations liées à l’utilisateur. Pour combler ce manque, PHP met à notre
disposition les sessions. Grâce aux sessions, des informations, des variables, se transmettent de
requête en requête, de page en page, pour chaque utilisateur au cours de sa visite.
[/chapeau]
[introduction]
Si les cookies permettent aussi de maintenir des informations sur l’utilisateur du coté client, ils sont
souvent critiqués, parfois interdits par le navigateur, et ne sont pas adaptés au stockage
d’informations de sécurité et d’authentification. On peut aussi choisir de passer les variables
directement dans les URL mais, en plus de surcharger les liens, ceci rend l'ensemble des informations
sensibles visibles par tout un chacun. Pour un site utilisant PHP, on se tournera donc vers les
sessions, très simples d’utilisation et offrant une totale transparence du coté client. Nous
commencerons par décrire brièvement le principe de fonctionnement des sessions, puis on s’attardera
sur l’utilisation concrète de celles-ci. Pour terminer, l’article donnera quelques erreurs fréquentes à
éviter et quelques conseils d’utilisation.
[/introduction]
I Principe Général de Fonctionnement
Lorsqu’un visiteur se connecte à un site utilisant les sessions, un identifiant unique généré
aléatoirement par cryptographie (md5) lui est attribué. Cet identifiant, encore appelé ID de session, le
suivra tout au long de sa visite et permet à PHP de retrouver la session qui lui correspond. Sur le
serveur sont stockées l’ensemble des sessions de tous les visiteurs. Chaque session enregistrée sur le
serveur contient un certain nombre de variables.
En résumé, ce mécanisme associe à chaque visiteur une session, identifiée par un ID, et donc des
données qui lui sont propres et qui vont le suivre tout au long de sa visite. Pour pouvoir retrouver la
session qui correspond au visiteur à chaque requête, il faut pourtant que l’ID soit transmis d’une
manière ou d’une autre de page en page. On verra par la suite qu’il y a plusieurs techniques pour ce
faire, aucune n’étant parfaite, et qu’il faudra choisir astucieusement. Ceci constitue probablement la
principale subtilité des sessions en PHP.
II Utilisation des sessions
II.1 Ouvrir une session
Pour ouvrir une session il suffit d’appeler la fonction session_start();. Cette fonction initialise la
session de l’internaute et doit impérativement être placée avant toute sortie du script vers la page html
ou tout affichage (echo etc…) sous peine de créer une erreur et d’arrêter l’exécution du script (comme
lorsque l’on utilise la fonction setcookie(); après un affichage). Lorsque cette fonction est appelée :
•
PHP cherche à récupérer un ID de session de l’internaute (par les moyens que nous
présenterons plus tard).
•
Si PHP obtient un ID de session correct, il restitue la session de l’internaute ainsi que l’état
des variables. Il s’agit du cas normal et l’internaute vient d’une autre page du site où sa
session a déjà été ouverte (une page login.php par exemple). La session est alors réactivée
•
grâce à son ID, et les variables récupèrent leur valeur (par exemple le nom, le prénom de la
personne etc…)
PHP ne parvient pas à retrouver l’ID de session de l’utilisateur, soit parce qu’il a été perdu en
cours de route, soit parce que l’utilisateur vient juste d’arriver sur le site et il s’agit de la
première page qu’il demande. Une nouvelle session est créée, un nouvel ID de session est
donné au visiteur. En général c’est à ce moment qu’on initialise les variables propres au
visiteur pour les utiliser dans le script (par exemple dans le cas d’un forum on aura
typiquement une variable $prenom, $num_posts, $avatar etc…).
Que celle-ci soit restituée ou nouvellement créée, à partir du moment ou session_start a été
exécutée la session de notre visiteur est ouverte. Il est à présent possible d’accéder aux variables de
sessions, ce qui fera l’objet du paragraphe suivant.
[Note]
Lorsque la fonction session_start est placée après un affichage, PHP génère l’erreur suivante. Ne
paniquez pas ! La localisation de l’affichage perturbateur est donnée directement dans le message
d’erreur. Il suffit alors de se reporter à la ligne du script indiquée et d’éliminer ou déplacer ce qui
génère cette sortie indésirable (typiquement un echo ou printf oublié !). Voici le message d’erreur qui
s’affichera sur la page html obtenue :
Warning: Cannot send session cookie - headers already sent by (output started at
login.php:15) in login.php on line 17
Warning: Cannot send session cache limiter - headers already sent (output started
at login.php:15) in login.php on line 17
Dans cet exemple, la function session_start se situe à la ligne 17 du script login.php, et l’affichage
qui crée l’erreur se trouve ligne 15 de ce même script. Il faut donc déplacer l'affichage de la ligne 15
après la ligne 17.
[/Note]
II.2 Variables de sessions
Une fois la session ouverte, nous pouvons enregistrer des variables de session, supprimer des
variables de session ou en modifier le contenu. Les variables de session sont les variables qui sont
propres à la session du visiteur et dont la valeur est conservée au cours de sa visite. A chaque
ouverture de session avec session_start(), si un ID de session valide est disponible, leur valeur est
restituée. Si la session est clôturée (par exemple : le visiteur quitte le site ou se déconnecte
manuellement), les variables sont automatiquement supprimées. Les opérations d’enregistrement, de
modification, et de suppressions de variables peuvent se faire de deux manières différentes. La
première utilise les fonctions de php dédiées aux sessions, alors que la seconde utilise directement les
variables globales de PHP pour accéder aux variables de la session. Nous verrons les deux techniques
en parallèle avec en priorité la manière la plus simple de procéder, celle qui s’affranchit des fonctions,
la seconde.
Pour mieux comprendre les variables de session plaçons nous dans le cas de la connexion d’un
utilisateur sur un site. Imaginons que celui-ci contienne une page appelée login.php avec un champ
du formulaire html appelé login0 et pass0 qui POST sur login.php. Le visiteur inscrit son login et son
pass pour se connecter. Il clique sur le bouton ‘connexion’ et les variables login0 et pass0 sont
récupérées en entrée du script login.php. Voici comment se déroule alors la procédure d’ouverture de
session :
//Récupération de la valeur des variables du formulaire
$monlogin = $_POST['login0'];
$monpass = $_POST['pass0'];
//On ouvre la session. Si l'utilisateur a déjà une session ouverte, elle est restituée.
//Si l'utilisateur vient d'accéder au site, on lui génére un nouvel ID de session
session_start();
//vérification dans une base des données que login et pass correspondent
$res = myslq_query(SELECT * FROM …
$infos = mysql_fetch_array($res);
//dans le cas ou le pass et le login correspondent bien on enregistre des variables !
if(!strcmp($infos[login],$monlogin)&&! strcmp($infos[pass],$monpass)){
$_SESSION[‘page_count’] = 0 ;
$_SESSION[‘name’] = $infos[prenom] ; //récupéré depuis la base de données
$_SESSION[‘author_id’] = $infos[id] ; //récupéré depuis la base de données
//attention il ne s’agit pas de l’id de session, c’est juste un identifiant qui peut servir pour repérer de
manière unique les auteurs des messages d’un forum par exemple.
$_SESSION[‘logged’] = 1 ; //positionnée à 1 cette variable nous indique que l’utilisateur est bien
loggé.
//Les quatre lignes de code précédentes peuvent aussi s’écrire avec les fonctions de sessions :
//Les deux méthodes sont équivalentes. A vous de choisir !
$page_count=0 ;
session_register("page_count"); //La variable $page_count fait maintenant partie de la session
$name = $prenom ;
session_register("name");
$author_id = $id ;
session_register("author_id");
$logged = 1;
session_register("logged");
//Fin de la partie qui nous intéresse.
}
Cette procédure d’authentification reste simpliste dans le but d’expliquer correctement les sessions.
Pour une authentification plus sûre il faudrait rajouter un certain nombre de contrôles, et rajouter
peut être un petit sleep(1) pour éviter les surcharges malencontreuses... Après l’exécution de ce
script l’utilisateur ayant un login et un pass acceptés a obtenu un ID de session, qu’il va transmettre
de page en page, et récupérer ainsi à chaque fois ses variables.
Il y a donc deux techniques pour enregistrer une variable de session :
•
La première utilise directement les variables d'environnement de PHP. On peut directement
créer une variable de session en ajoutant $_SESSION['mavariable']=valeur. Ensuite, sur
les autres pages, une fois la session ouverte, on peut accéder à la valeur de cette variable tout
simplement en utilisant directement $_SESSION['mavariable'].
•
La seconde technique requiert que la variable soit d'abord enregistrée c'est-à-dire attribuée à
la session en cours. Au moment ou l'on crée la session, sur la page login.php, il faut penser à
appeler session_register('mavariable'). Ensuite, sur les autres pages, une fois la
session ouverte avec session_start, on pourra accéder directement aux variables de
sessions par leur nom, $mavariable. Ceci est donc, à l'exception de la procédure
d'enregistrement, plus simple que la première technique mais parfois un peu trompeur
puisqu'on pourrait confondre une variable locale du script avec une variable de session.
Par la suite nous utiliserons la première convention. Un exemple d’accès aux variables de sessions est
donné par le script suivant :
//Ne pas oublier l’ouverture de session quelques part en haut du script
//permet de restituer les éventuelles variables de sessions du visiteur qui s'est loggé sur login.php
session_start();
//A partir de ce moment si l'on a choisi d'utiliser les fonctions pour enregistrer les variables on peut
//accéder à $name, $page_count etc… si la seconde technique a été utilisée on a accès à
//$_SESSION['name'] etc…
//…plus loin dans le script…
//On va maintenant déterminer si le visiteur s’est authentifié correctement.
//Si le visiteur c'est loggé sur la page login.php sa session doit donc contenir la variable
//de session logged à 1.
//Sinon la variable de session logged n'est pas enregistrée et n'est pas égale à 1
if($_SESSION[‘logged’]==1){
//Equivalent à if(session_is_registered("logged")&&$logged==1){
echo "Merci $_SESSION[‘name’], votre message est posté";
//ou encore directement puisque si la variable a été enregistrée comme variable de sessions
//echo "Merci $name, votre message est posté. (Re)";
$_SESSION['page_count'] = $_SESSION['page_count'] + 1;
echo "Au fait, vous avez visité $page_count aujourd'hui";
}
else{
//Un message gentil.
echo "Il faut être connecté pour poster sur ce forum. Vous pouvez vous connecter <a
href=\"login.php\">ici</a>";
}
Ainsi on peut accéder dans tous nos scripts à toutes les informations qui suivent le visiteur. Il reste
néanmoins un point important à éclaircir.
II.3 Propagation de l'ID de session
De page en page, à chaque fois que la session est ouverte avec session_start(), PHP cherche à
trouver un ID de session valide correspondant au visiteur. S'il n'en trouve pas, il considère que le
visiteur vient d'arriver et crée une nouvelle session avec un nouvel id. Dans le cas contraire, PHP
parvient à récupérer l'ID de session de plusieurs manières :
•
•
•
Un Cookie du coté client qui contient l'ID de session, et ayant une durée de vie nulle. Ceci
implique, à juste titre, qu'une fois le navigateur arrêté, le cookie se détruit et l'ID est perdu
(donc lorsque l'on se connecte à nouveau au site il faudra se logger etc…). Cette solution est
gérée entièrement par PHP, et il n'y a pas lieu de se préoccuper du cookie. Elle nécessite
simplement de bien avoir configuré PHP avec 'session.use_cookies' à 1. Bien qu'étant la plus
simple, le fonctionnement de cette méthode est conditionné, coté client, par l'acceptation des
cookies par le navigateur internet. Il s'agit de la méthode que j'utilise pour mon site, et
principalement, il faut l'avouer, par paresse. Pour avoir recueilli un bon nombre de membres
et leurs statistiques associées, il semblerait malgré tout que le système fonctionne bien pour
99% d'entre eux. Néanmoins, tout le monde n'accepte pas les cookies, donc pour un site plus
sérieux voici deux alternatives plus fiables :
Passer l'id de session dans l'URL. Cette solution fonctionne à tous les coups et ne dépend pas
des paramètres de sécurité du client comme la méthode des cookies. Il suffit d'ajouter à tous
les liens pointant vers des pages internes au site l'ID de session en paramètre au bout de la
chaîne de l'URL. Par exemple : "index.php?".session_name()."=".session_id() ou
index.php?<? echo session_name();?>=<? echo session_id(); ?> ou encore :
printf('<a href="script.php?%s"> Link </a>', SID). SID vaut
session_name()."=".session_id() si l'id de session n'a pas pu être enregistré comme
cookie. Cette méthode charge un peu les URLs du site, mais fonctionne toujours. Elle ne
demande aucune procédure particulière dans la page cible du lien : il suffit d'ouvrir tout
simplement la session avec session_start et PHP récupèrera automatiquement l'ID de
session grâce aux variables dans l'URL de la page. Au niveau indexation des pages par les
moteurs de recherche, normalement l'ajout de cette chaîne sur tous les URLs du site ne gêne
pas.
Transmission de l'ID de session dans l'URL des liens automatiquement et de manière
transparente. Une ultime alternative offrant un juste compromis entre la simplicité des
cookies et la fiabilité de l'URL reste la possibilité de transmettre l'ID de session
automatiquement et de manière invisible dans l'URL. Ceci ne fonctionnera que si PHP a été
compilé avec l'option ' –-enable-trans-sid' et qu'on a configuré 'session.use_trans_sid' à 1.
Malheureusement, cette méthode fonctionne uniquement avec les adresses relatives de page
web (./index.php). PHP ne considère pas les adresses absolues (http://…) comme faisant
partie du site et ne transmet pas l'ID dans l'URL. Enfin, cette méthode reste assez coûteuse
dans la mesure ou PHP doit examiner chaque lien de la page. Par contre, l'ID de session ne
vient pas encombrer les URL visibles dans la barre d'adresse du navigateur.
Comme toujours, le choix de la méthode reste un compromis à trouver entre la simplicité à
implémenter et la fiabilité. Pour un site naissant, où le problème de la simplicité d'ajout des sessions
dans les scripts intervient moins, on se tournera de préférence vers les deux dernières méthodes.
[img]
Un extrait de phpinfo, avec les valeurs des variables de configuration. Les lignes qui nous interessent
particulièrement ici sont .use_cookies, .use_only_cookies et .use_trans_sid. (fig1)
[/img]
[img]
Un exemple de début de page phpinfo ou l'on peut notamment vérifier que l'option de compilation '—
enable-trans-id' a été utilisée. (fig2)
[/img]
[note]
Pour rappel, les options de compilation de php ainsi que les variables de configuration sont
récapitulées par la fonction phpinfo(). On pourra donc créer un script php et simplement y ajouter
<?php phpinfo(); ?>. Parmi l'ensemble des informations affichées par ce script, on pourra
notamment s'intéresser ici à la section 'session' (fig1) et aux options de compilation (fig2) dans
lesquelles apparaissent les options citées précédemment. Pour comparer les configurations PHP des
différents hébergeurs, la plupart proposent une page 'phpinfo' publique qui appelle cette fonction. Le
site http://www.centrale-lyon.org/ng/phpinfo.html répertorie des liens vers les pages phpinfo
de la plupart des hébergeurs les plus populaires.
[/note]
II.4 Terminer la session
Avant de terminer une session, il peut être utile se supprimer uniquement certaines des variables de
sessions. Dans le cas où la méthode des variables globales $_SESSION comme variables de sessions a
été choisie, il suffit de taper : $_SESSION['mavariable_enregistree']=""; ou encore :
$_SESSION['name'] = FALSE;. Dans le cas ou l'on enregistre les variables à l'aide de la fonction
session_register("variable"), il existe la fonction session_unregister("variable") qui se
chargera de détruire une variable de session enregistrée. Dans les deux cas, seules les variables
concernées sont détruites et la session reste active.
Le fait que PHP fonctionne du coté serveur et sur requêtes, empêche celui-ci de savoir, a priori, si un
visiteur est simplement en train de lire une page du site depuis longtemps ou s'il a simplement quitté
celui-ci. Lorsqu'une session reste inactive au delà d'un certain temps gc_maxlifetime (variable de
configuration de php au même titre que use_trans_sid, use_cookies etc…) elle est détruite
automatiquement. PHP fonctionnant uniquement sur requête, on ne va pas parcourir à chaque fois
l'ensemble des sessions à la recherche des sessions éteintes. Ainsi le paramètre gc_probability
permet de régler la probabilité de parcourir les sessions au moment de chaque exécution de script (de
1 à 100). Par exemple si cette variable vaut 100, à chaque requête PHP parcourt l'ensemble des
sessions à la recherche de celle qui datent de t-gc_maxlifetime secondes pour les détruire. Ces
mécanismes de clôture de session sont surtout important dans le cas d'une transmission de l'ID de
session par URL. En effet, dans ce cas il ne faudrait pas qu'un utilisateur ayant placé un URL avec ID
de session dans ses favoris, et ayant quitté le site depuis un certain temps, revienne et continue sa
session. Dans un site à moindre fréquentation on pourra donc augmenter gc_probability sans
craindre une perte de performance et en s'assurant de ne pas oublier des sessions éteintes à détruire.
Les cookies pour transmettre l'ID de session ont une durée de vie de 0. Ainsi, dans le cas ou PHP
utilise les cookies pour transmettre l'ID de session il n’y a pas de risque de retrouver sa propre session
après avoir fermé le navigateur. Les cookies ayant une durée de vie nulle sont automatiquement
supprimés une fois le navigateur fermé. Par contre, ceci ne permet toujours pas à PHP de savoir si
vous avez effectivement quitté le site ou si une page est en cours de lecture. Les paramètres
précédents interviennent donc dans une moindre mesure puisqu'il suffit de rallonger gc_maxlifetime
sans craindre qu'utilisateur retrouve une ancienne session à son arrivée sur le site.
Enfin, l'idéal reste de mettre à disposition un lien 'déconnexion' qui pointe sur un script qui appelle la
fonction session_destroy() détruisant la session active. Dans la mesure ou certains visiteurs vont
prendre la peine de se logger avec un login et un mot de passe, ils vont probablement aussi chercher
une manière de se délogger. Sur mon propre site, n'ayant pas ajouté cette fonction, j'ai reçu plusieurs
remarques de personnes qui ne trouvaient pas le bouton pour se délogger. A noter que si vous utiliser
cette fonction et les variables globales $_SESSION, il faudra d'abord effacer toutes les variables de
session avec le code suivant :
$_SESSION = array();
session_destroy();
Bien sur avant de placer session_destroy il faut avoir ouvert une session avec 'session_start'
auparavant, afin que PHP sache quelle session détruire.
III Quelques remarques
III.1 Résumé des fonctions de sessions
Résumons ici le rôle des fonctions évoquées dans l'article. Pour plus de détails le lecteur pourra
évidemment se reporter au manuel PHP en ligne. Les fonctions à retenir seraient les suivantes (à noter
que certaines n'ont pas d'utilité dans le cas ou l'on utilise les variables globales $_SESSION) :
•
•
•
•
•
•
•
•
•
•
session_start : Ouvre la session ou la rétablit selon qu'ID de session valide est disponible.
Cette fonction est à placer au début de chaque script utilisant les sessions et avant tout
affichage du script.
session_id([id]) : Retourne l'ID de session en cours ou force l'ID de session à utiliser. Cette
fonction se montre particulièrement utile dans le cas ou l'ID est transmit dans l'URL
manuellement. Elle sert à utiliser l'ID passé dans l'URL, ou encore à contruire l'URL.
session_name([nom]) : De la même manière et dans le même but que la fonction précédente,
permet de définir le nom de la session ou de rédupérer celui-ci. Le nom par défaut est défini
par le session.name défini dans la configuration de PHP.
session_register("variable") : Enregistrer une variable comme variable de session qui
sera transmise de page en page.
session_is_registered("variable") : Vérifie si une variable est enregistrée dans la
session active.
session_unregister("variable") : Détruit une variable de session de la session active.
session_destroy() : Détruit la session active.
session_unset() : Détruit l'ensemble des variables de la session, sans détruire la session
elle-même.
session_write_close() : Sauvegarde toutes les variables de sessions et ferme la session
(sans la détruire). Normalement cette fonction est appelée automatiquement à la fin d'un
script. L'usage de cette fonction est plutot réservé aux sites avec frames. Normalement le
serveur PHP n'autorise qu'un seul script à la fois à utiliser une session donnée. Dans le cas ou
un site avec frames tente de charger toutes les pages à la fois avec accès à la même session,
PHP impose d'exécuter les scripts séquentiellement et on voit alors les frames apparaître les
unes après les autres. On peut alors gagner du temps en appelant cette fonction dès que l'on a
plus besoin des variables de session dans le script.
session_regenerate_id() : Créer un nouvel ID et remplace l'existant dans une session
ouverte, sans perdre une seule variable de session. Cette fonction peut être utilisée pour
brasser plus fréquemment les ID de session et rendre certaines techniques de 'vol' d'ID plus
délicates.
III.2 Conseils et utilité
En réalité les sessions sont incontournables dans certains cas particuliers seulement. A partir du
moment où l'on souhaite avoir un forum, un site commercial avec des achats en ligne, plusieurs
espaces de discussion, dès qu'il s'agit de transmettre des données propres à un visiteur au cours de sa
visite on y fera appel. En revanche, quand ce n'est pas nécessaire il vaut mieux éviter. Notamment, on
utilisera pas les sessions pour envoyer des données ou transmettre des informations vers une seule
page (au pire utiliser des champs hidden d'un formulaire html). Vous l'avez compris, les sessions ne
gardent pas leurs données entre chaque visite, elles sont donc en générales associées à une base
MySQL. En ce qui concerne mon expérience personnelle, je n'ai eus à y recourir que récemment parce
que je voulais permettre à mes visiteurs d'être identifiés sur mon site et pouvoir poster dans toutes les
sections en étant authentifiés. Une dernière astuce : On peut visualiser l'ensembles des variables de la
session ouverte en ajoutant ce simple code à titre de vérification :
echo "Sessions: <pre>";
print_r($_SESSION);
echo "</pre>";
III.3 Sessions et sécurité
Si le client est lui-même responsable de transmettre l'ID de session à utiliser, comment empêcher
quelqu'un d'usurper la session d'un autre. Tout d'abord parce que l'ID de session est une chaîne de 32
chiffres hexadécimaux. Il est donc 'rare', même en tâtonnant de manière brutale, de tomber au hasard
sur l'ID de session de quelqu'un d'autre ! Le manuel PHP stipule clairement que le module de session
ne peut garantir que les informations stockées ne sont accessibles qu'à la personne ayant débutée la
session. Il ajoute que c'est à la charge du webmaster de se donner les moyens d'authentifier un ID de
session à un visiteur. La manière de réaliser cela ne me semble pas triviale, il est simplement
important d'être conscient qu'une session n'est pas forcément confidentielle. Le manuel PHP
recommande par exemple, d'activer la variable 'session.use_only_cookies' si l'on craint les techniques
de piratage qui consistent à demander directement un ID de session à quelqu'un sous un prétexte
quelconque (techniques dites de 'social engineering'). Celle-ci impose aux sessions d'utiliser les cookies
comme moyen de transmission de l'ID pour fonctionner.
Ainsi il existe plusieurs techniques pour récupérer un ID de session actif, autres que celles
mentionnées précédemment. Par exemple si votre site contient un lien vers le site d'une personne peut
scrupuleuse. Lorsqu'un visiteur clique sur ce lien et arrive sur le site du fraudeur celui-ci peut
récupérer l'adresse du 'referer' ou site amont et donc l'ID éventuellement contenu dans l'URL… Enfin,
un fraudeur peut toujours tenter d'écouter le traffic d'un client ou du serveur et récupérer les ID de
sessions qui sont transmis en clair dans le flux de données. La seule parade est d'imposer une
connexion cryptée SSL aux clients et au serveur !
Enfin, il est souvent recommandé à chaque ouverture de session de créer un nouvel ID de session.
Ceci permet de brasser les ID de sessions et de brouiller au maximum les curieux. Avec la fonction
session_regenerate_id() on peut attribuer un nouvel ID à la session en cours, néanmoins cette
fonction ne détruit pas l'ancienne session, et les variables existent en double. En fait, cette fonction se
contente de copier la session vers un nouvel ID. On pourrait, à la place, utiliser le code suivant:
//On ouvre la session avec l'ID en cours
session_start();
//On copie les variables de session
$tmpSession=$_SESSION;
//On détruit les anciennes variables de session
$_SESSION = array();
//Destruction de la session
session_destroy();
//Utilisation du nouvel ID
session_id(md5(microtime()));
//Ouverture de la nouvelle session
session_start();
//Copie des variables
$_SESSION = $tmpSession;
La sécurité et la confidentialité avec les sessions constituent un vaste sujet de discussion.
Heureusement c'est aussi un sujet largement abordé sur Internet. Le lecteur peut éventuellement se
reporter à l'excellente présentation traitant de la sécurité des sessions en [5].
Conclusion
Reste à rappeler que les sessions sont incontournables pour un site ayant une communauté
de membres. Il s'agit de l'unique manière de réaliser en PHP un système fiable d'enregistrement et de
connexion d'utilisateurs sur un site. Avant de se lancer directement dans l'implantation des sessions
sur un site, mieux vaudra prendre le temps au préalable de clarifier quelques points délicats évoqués
au cours de l'article : la transmission de l'ID, la sécurité et la confidentialité. Les sessions ayant une
durée de vie limitée au temps de visite, elles sont généralement couplées à une base de donnée MySQL
qu'il faudra concevoir en conséquence.
4259
Références
[1] : [http://www.phpfreaks.com/tutorials/41/0.php] : php freaks, PHP Sessions Introduction.
[2] : [http://www.phpinfo.net/articles/article_sessions.html] : PHPInfo.net, Guillaume Smet, La
Gestion des sessions avec PHP4.
[3] : [http://www.zend.com/zend/tut/session.php] : Zend, The php Company, Tobias Ratschiller,
Session handling with PHP4.
[4] : [http://fr.php.net/session] : PHP Manual, CXI. Session Handling Functions.
[5] : [http://shiflett.org/talks/oscon2004-securing-php-sessions/0] : Chris Shiflet, Securing PHP
Sessions.
[6] : [http://www.phptools4u.com/articles/view.php?article=4] : PHPTools4U, Mathieu Lesniak, Les
sessions PHP.
[7] : [http://xqus.com/archives/regenerate-php-session-id] : xqus.com, xqus, Regenerate Session Id.

Documents pareils