148 votes

Comment fonctionnent les sessions PHP ? (et non "comment sont-elles utilisées ?")

Les fichiers de session sont généralement stockés dans, disons, /tmp/ sur le serveur, et nommé sess_{session_id} . J'ai examiné le contenu et je n'arrive pas à comprendre comment il fonctionne réellement.

Récupérer le nom de la variable et son contenu dans le fichier est facile. Mais comment PHP peut-il savoir quelle session appartient à qui ?

Le session_id semble totalement aléatoire et une adresse IP peut avoir plusieurs utilisateurs, et chaque utilisateur peut avoir plusieurs sessions s'il a plus d'une fenêtre de navigateur ouverte.

Alors, comment ça marche ?

0 votes

Jetez un coup d'œil à stackoverflow.com/questions/523703/

227voto

Pascal MARTIN Points 195780

Dans la situation générale :

  • l'identifiant de session est envoyé à l'utilisateur lors de la création de sa session.
  • il est stocké dans un cookie (appelé, par défaut, PHPSESSID )
  • ce cookie est envoyé par le navigateur au serveur à chaque requête
  • le serveur (PHP) utilise ce cookie, contenant le session_id, pour savoir quel fichier correspond à cet utilisateur.

Les données dans les fichiers de sessions sont le contenu de $_SESSION sérialisé (c'est-à-dire représenté sous forme de chaîne de caractères -- avec une fonction telle que sérialiser ) et est dé-sérialisé lorsque le fichier est chargé par PHP, pour remplir le champ $_SESSION le tableau.

Parfois, l'identifiant de session n'est pas stocké dans un cookie, mais envoyé dans les URL, également - mais c'est assez rare, de nos jours.

Pour plus d'informations, vous pouvez consulter le site web de la Commission européenne. Traitement des sessions section du manuel, qui donne quelques informations utiles.

Par exemple, il existe une page sur Transmission de l'ID de session qui explique comment l'identifiant de session est transmis d'une page à l'autre, à l'aide d'un cookie ou dans les URL, et quelles options de configuration ont une incidence sur ce point.

6 votes

Comment un appareil mobile (à partir d'une application native) gère-t-il les sessions normalement ? Stocke-t-il un ID de session ? Ou est-ce que c'est là qu'intervient OAuth ?

0 votes

Vous dites donc que les sessions PHP sont gérées côté serveur, et qu'il ne faut pas s'attendre à voir les variables de session elles-mêmes identifiées dans le "Session Store" du navigateur ?

31voto

Sohel Rana Points 328

Comment fonctionne la session PHP

  • Tout d'abord, PHP crée un numéro d'identification unique de 16 octets (stocké sous la forme d'une chaîne de 32 caractères hexadécimaux, par ex. a86b10aeb5cd56434f8691799b1d9360 ) pour une session individuelle.

  • Le cookie PHPSESSID transmet ce numéro d'identification unique au navigateur de l'utilisateur afin de l'enregistrer.

  • Un nouveau fichier est créé sur le serveur avec le même nom de numéro d'identification unique avec le préfixe sess_ (c'est-à-dire sess_a86b10aeb5cd56434f8691799b1d9360 .)

  • Le navigateur envoie ce cookie au serveur à chaque demande.

  • Si PHP obtient ce numéro d'identification unique à partir du cookie PHPSESSID (à chaque requête), alors PHP cherche dans le répertoire temporaire et compare ce numéro au nom du fichier. Si les deux sont identiques, alors il récupère la session existante, sinon il crée une nouvelle session pour cet utilisateur.

Une session est détruite lorsque l'utilisateur ferme le navigateur ou quitte le site. Le serveur met également fin à la session après l'expiration de la période prédéterminée de la session. Ce sont les étapes simples du mécanisme que PHP utilise pour gérer la session. J'espère que cet article vous aidera à comprendre le fonctionnement de la session PHP.

4voto

Julien Lebosquain Points 20894

L'ID de session est en effet aléatoire, et est transmis dans un cookie ou dans l'URL, selon la configuration. Vous avez peut-être déjà vu ce PHPSESSID=xxxx dans certaines URL, il existe également un cookie de ce nom.

2voto

Akbor Points 376

Les sessions en PHP sont démarrées en utilisant la fonction session_start( ). Comme la fonction setcookie( ), la fonction session_start( ) doit être placée avant tout HTML, y compris les lignes vides, sur la page. Elle ressemblera à ceci : <?php session_start( );?><html><head> ....... etc La fonction session_start( ) génère un identifiant de session aléatoire et le stocke dans un cookie sur l'ordinateur de l'utilisateur (ce sont les seules informations de session qui sont réellement stockées côté client). Le nom par défaut du cookie est PHPSESSID, bien qu'il puisse être modifié dans les fichiers de configuration PHP du serveur (la plupart des hébergeurs le laissent cependant tel quel). Pour faire référence à l'identifiant de session dans votre code PHP, vous devez donc faire référence à la variable $PHPSESSID (c'est le nom d'un cookie, vous vous en souvenez dans Cookies).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X