Comment fonctionnent les sessions PHP? (et non pas "comment sont-ils utilisés?")

Fichiers de Session sont généralement stockés dans, disons, /tmp/ sur le serveur, et nommé sess_{session_id}. J'ai regardé le contenu et je ne peux pas comprendre comment ils fonctionnent vraiment.

Récupérer le nom de la variable et le contenu du fichier est facile. Mais comment PHP sait-il 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 si ils ont plus d'une fenêtre de navigateur ouverte.

Alors, comment il travail?

104
demandé sur Peter O. 2009-10-08 08:52:14

4 réponses

Dans la situation générale :

  • l'id de session est envoyé à l'utilisateur lors de sa session est créée.
  • , 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 -- avec une fonction telle que sérialiser) ; et est non sérialisé lorsque le fichier est chargé par PHP, pour remplir le tableau $_SESSION.


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


Pour plus d'informations, vous pouvez consulter la section Session Handling du manuel, qui donne quelques informations utiles.

Par exemple, il y a une page sur passant la Session ID , qui explique comment l'id de session est passé d'une page à l'autre, à l'aide d'un cookie ou dans des URL-et quelles options de configuration affectent cela.

166
répondu Pascal MARTIN 2009-10-08 04:57:17

Comment fonctionne la Session PHP

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

  • Le cookie PHPSESSID transmet ce numéro d'identification unique au navigateur des utilisateurs pour enregistrer ce numéro.

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

  • Le le navigateur envoie ce cookie au serveur à chaque requête.

  • Si PHP obtient ce numéro d'identification unique à partir du cookie PHPSESSID (à chaque requête), PHP recherche dans le répertoire temporaire et compare ce numéro au nom du fichier. Si les deux sont identiques, 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 termine également le session après la période prédéterminée de temps de session expire. 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 comment fonctionne la SESSION PHP.

Voir cet article pour plus de détails. Comment fonctionne la Session PHP

7
répondu Sohel Rana 2017-04-05 03:39:50

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

4
répondu Julien Lebosquain 2009-10-08 04:56:32

Les Sessions en PHP sont démarrées en utilisant la fonction session_start (). Comme la fonction setcookie (), la fonction session_start () doit précéder tout HTML, y compris les lignes vides, sur la page. Cela ressemblera à ceci: <?php session_start( );?><html><head> ....... etc La fonction session_start () génère un ID de Session aléatoire et le stocke dans un cookie sur l'ordinateur de l'utilisateur (c'est la seule information de session qui est réellement stockée du côté client.) Le nom par défaut du cookie est PHPSESSID, bien que peut être modifié dans les fichiers de configuration PHP sur le serveur (la plupart des sociétés d'hébergement laissera seul, cependant.) Pour référencer l'ID de session dans votre code PHP, vous référenceriez donc la variable $PHPSESSID (c'est un nom de cookie; rappelez-vous cela des Cookies?)

1
répondu Akbor 2016-09-08 08:35:37