Comment fonctionnent les sessions PHP? (pas «comment sont-ils utilisés?»)

127

Les fichiers de session sont généralement stockés, par exemple, /tmp/sur le serveur et nommés sess_{session_id}. J'ai regardé le contenu et je ne peux pas comprendre comment ils fonctionnent vraiment.

La récupération du nom et du contenu de la variable à partir 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 s'il a plus d'une fenêtre de navigateur ouverte.

Alors, comment ça marche?

Christoffer
la source
Jetez un œil à stackoverflow.com/questions/523703/…
adatapost

Réponses:

202

Dans la situation générale:

  • l'ID 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 demande
  • le serveur (PHP) utilise ce cookie, contenant l'identifiant de session, pour savoir quel fichier correspond à cet utilisateur.

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


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


Pour plus d'informations, vous pouvez jeter un œil à la section Gestion de session du manuel, qui donne quelques informations utiles.

Par exemple, il existe une page sur la transmission de l'ID de session , qui explique comment l'ID de session est transmis de page en page, à l'aide d'un cookie ou dans les URL - et quelles options de configuration affectent cela.

Pascal MARTIN
la source
5
Comment un appareil mobile (à partir d'une application native) gère-t-il normalement les sessions? Stocker un identifiant de session? Ou est-ce là où OAuth arrive?
Adam Waite
13

Comment fonctionne la session PHP

  • Premièrement, PHP crée un numéro d'identification unique de 16 octets (stocké sous forme de 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 le préfixe sess_ (ie sess_a86b10aeb5cd56434f8691799b1d9360.)

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

  • Si PHP obtient ce numéro d'identification unique du cookie PHPSESSID (à chaque requête), alors 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 met également fin à la session après l'expiration de la période prédéterminée de temps de 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 comment fonctionne PHP SESSION.

Consultez cet article pour plus de détails. Comment fonctionne la session PHP

Sohel Rana
la source
Mais si je suis, disons, connecté à un certain site (aka: dans une session), et ouvrez un nouvel onglet mysite.com/cart. Je recevrai également mon "Bonjour Joe Doe, 5 messages, voici votre liste de panier ..." aka les informations de session. - Mais pourquoi le navigateur concernant cet onglet vide enverrait-il un identifiant de session avec la demande GET? mise à jour rapide: Ah, j'ai trouvé la réponse: +)
Frank Nocke
Puis-je demander comment l'ID de session peut assurer la sécurité? Par exemple, si l'utilisateur s'est connecté et arrive à son profil, que de modifier le paramètre d'url pour accéder au profil de différents utilisateurs, comment l'ID de session peut-il empêcher cela?
Andrewboy
4

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 existe également un cookie portant ce nom.

Julien Lebosquain
la source
2

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 identifiant de session aléatoire et le stocke dans un cookie sur l'ordinateur de l'utilisateur (c'est la seule information de session réellement stockée côté client. ) Le nom par défaut du cookie est PHPSESSID, bien que cela puisse être modifié dans les fichiers de configuration PHP sur le serveur (la plupart des hébergeurs le laisseront cependant seul.) Pour référencer l'identifiant de session dans votre code PHP, vous référeriez donc le variable $ PHPSESSID (c'est un nom de cookie; vous vous en souvenez de Cookies?)

Akbor
la source