« Programmation PHP/Sessions » : différence entre les versions

Contenu supprimé Contenu ajouté
m Révocation des modifications par 194.2.20.67 (Discussion) vers la dernière version de 194.199.119.14
m Bot : Remplacement de texte automatisé (- {,2}\| ?précédent {,3}= ?\[\[([\w\s]*)\/([\w\s]*)\|([\w\s]*)\]\] + | précédent = ../\2/); changement de type cosmétique
Ligne 4 :
| leçon = [[PHP]]
| numero = 9
| précédent = [[PHP../Formulaire|Les formulaires/]]
}}
 
Ligne 13 :
C'est en effet la solution la plus simple pour un webmaster afin de garder des informations sur son visiteur.
 
== Un cookie et une session, quelles différences ==
 
Une session est plus ou moins similaire aux cookies HTTP. Les données d'une session sont cependant stockées sur le serveur et non chez le client, ce qui l'empêche de pouvoir les modifier manuellement, comme il peut le faire pour un cookie.
 
== La durée de vie d'une session ==
 
Une session est, comme son nom l'indique, une session de navigation. Elle commence donc lors de l'accès à une page les utilisant et se termine à la fermeture du navigateur du client.
Ligne 25 :
Cependant, la session possède aussi un délai d'expiration. Celui-ci peut être modifié dans la configuration du serveur (directive ''session.gc_maxlifetime''), mais vaut généralement une trentaine de minutes. Une fois ce délai dépassé, la session est supprimée.
 
== Comment ça marche ? ==
 
Lors de l'accès à une page nécessitant une session, PHP va vérifier si une a déjà été ouverte et la réutiliser ou en créer une nouvelle. Il va donc lui attribuer un identifiant unique et se débrouiller pour que la prochaine page consultée puisse le connaître.
Ligne 33 :
Dans les deux cas, le script ayant besoin d'accéder aux données de la session recevra l'identifiant et sera capable de charger les données qu'elle contient.
 
== Est-ce que c'est sécurisé ==
 
Une session est toujours plus sécurisée qu'un cookie puisque le client ne peut pas la modifier manuellement. Un risque subsiste tout de même si l'identifiant de session peut être découvert.
Ligne 40 :
Pour éviter cela, on peut utiliser une connexion cryptée ou configurer le serveur de façon à ce qu'il rende la lecture de ce cookie impossible par [[JavaScript]] (''Http Only'').
 
== Utiliser les sessions ==
 
=== Initialiser une session ===
 
Pour pouvoir utiliser la fonctionnalité de session de PHP, il faut lancer le moteur de session en utilisant la fonction <code>session_start()</code>.
Ligne 48 :
Cette fonction doit être en mesure d'envoyer des ''headers'' HTTP, aucune donnée ne doit donc avoir été transmise au navigateur. Vous pouvez soit placer ce code au tout début de votre script, soit utiliser les fonctions de bufférisation de sortie.
 
==== Une session portant un nom personnalisé ====
 
Une session porte par défaut le nom "PHPSESSID", c'est lui qui sera utilisé comme nom de cookie ou comme paramètre GET dans les liens... pas très esthétique. Il peut donc vous venir l'envie de changer ce nom.
Ligne 65 :
Noter la position de l'instruction 'session_start()'. Elle doit se trouver AVANT n'importe quel traitement de votre page '.php' .
 
==== Changer manuellement l'identifiant de la session ====
 
PHP détecte automatiquement l'identifiant à utiliser, cependant, vous pourrez avoir besoin de le changer manuellement, si vous voulez développer un système alternatif pour passer l'identifiant de session entre les pages. Vous pouvez par exemple vous baser sur le hachage (<code>md5()</code> ou <code>sha1()</code>) de l'adresse IP du client pour déterminer l'identifiant de la session. Attention aux proxys et aux internautes dont l'IP change à chaque requête.
Ligne 97 :
</source>
 
=== Lire et écrire des données dans la session ===
 
Les données de la session sont très facilement accessibles au travers d'un simple tableau PHP. Depuis PHP 4.1.0, vous pouvez utiliser le tableau super-global <code>$_SESSION</code>. Dans les versions plus anciennes, il s'appelait $HTTP_SESSION_VARS et nécessitait le mot clé <code>global</code> pour y accéder depuis une fonction.
Ligne 103 :
Ces tableaux n'existent qu'une fois la session chargée. Tout ce qui est stocké à l'intérieur est sauvegardé et accessible depuis toutes les pages PHP utilisant les sessions.
 
==== Exercice : Une zone d'administration protégée par mot de passe ====
 
Dans cet exercice, nous allons fabriquer pas-à-pas une zone d'administration pour votre site web, protégée par un mot de passe. Nous nous occuperons de la partie identification uniquement.
Ligne 109 :
Dans le chapitre précédent, vous avez également créé le même type de script, mais en utilisant un cookie. Nous allons donc adapter le code en utilisant des sessions à la place.
 
===== Le formulaire =====
 
Voici le code du formulaire en HTML, il va afficher une boîte de texte et un bouton "Connexion".
Ligne 120 :
</source>
 
===== La page de vérification =====
 
Le formulaire ci-dessus pointe vers une page nommée verfication.php. Cette page va vérifier que le mot de passe est juste et, si c'est le cas, placer un élément dans le tableau de la session pour que la page suivante puisse vérifier que vous êtes bien autorisé à voir la page.
Ligne 167 :
</source>
 
===== La page d'administration =====
 
Cette page doit se nommer admin.php. Si vous décider d'utiliser un autre nom, il faudra modifier le script d'identification pour qu'il pointe sur la bonne page.
Ligne 195 :
La suite du script n'est plus le sujet de cet exercice, le but est en effet atteint. Vérifier l'identité du visiteur pour lui permettre d'accéder à un espace privé.
 
=== Fermer une session ===
 
De la même façon que d'autre fonctionnalités de PHP, comme les connexions aux bases de données ou un pointeur de fichier, les sessions n'ont pas besoin d'être fermée.
Ligne 210 :
| idfaculté = informatique
| leçon = [[PHP]]
| précédent = [[PHP../Formulaire|Les formulaires/]]
}}