Où sont stockées les variables $ _SESSION?

158

Les $_SESSIONvariables sont-elles stockées sur le client ou le serveur?

Steve Gattuso
la source
sur le serveur sur lequel vous exécutez l'application php, pour un chemin spécifique, vous devez vérifier avec phpinfo ()
densityx

Réponses:

168

L'emplacement du $_SESSIONstockage variable est déterminé par la session.save_pathconfiguration de PHP . Il s'agit généralement /tmpd'un système Linux / Unix. Utilisez la phpinfo()fonction pour afficher vos paramètres particuliers si ce n'est pas sûr à 100% en créant un fichier avec ce contenu dans le DocumentRootde votre domaine:

<?php
    phpinfo();
?>

Voici le lien vers la documentation PHP sur ce paramètre de configuration:

http://php.net/manual/en/session.configuration.php#ini.session.save-path

rjamestaylor
la source
129

Comme mentionné déjà, le contenu est stocké sur le serveur. Cependant, la session est identifiée par un identifiant de session, qui est stocké chez le client et envoyé avec chaque requête. Habituellement, l'identifiant de session est stocké dans un cookie, mais il peut également être ajouté aux URL. (C'est le PHPSESSIDparamètre de requête que vous voyez parfois)

troelskn
la source
41
+1 parce que vous avez laissé entendre que les cookies ne stockent pas le contenu de $ _SESSION (ces contenus sont stockés sur le serveur, donc ne sont pas vulnérables à la modification par le client)
shufler
12
Excellente réponse! Je cherchais la question: "Pourquoi les sessions expirent-elles après la suppression du cache du navigateur?". Et tu as sauvé ma journée.
Élève du
2
serveur créer le fichier sess_7nu9p0fvidvva6ouaugqcc8292 et sur l'alerte du navigateur (getCookie ('PHPSESSID')); // 7nu9p0fvidvva6ouaugqcc8292
zloctb
2
Plus1 - Pour répondre à la question: "... stocké sur le client ou le serveur?"
Alex Vargas
22

Ils sont généralement stockés sur le serveur. L'endroit où ils sont stockés dépend de vous en tant que développeur. Vous pouvez utiliser la session.save_handlervariable de configuration et le session_set_save_handlerpour contrôler la manière dont les sessions sont enregistrées sur le serveur. La méthode d'enregistrement par défaut consiste à enregistrer les sessions dans des fichiers. L'endroit où ils sont enregistrés est contrôlé par la session.save_pathvariable.

Rob Kennedy
la source
18

Un ajout: il convient de noter que, dans le cas où "/ tmp" est le répertoire où les données de session sont stockées (qui semble être la valeur par défaut), les sessions ne persisteront pas après le redémarrage de ce serveur Web, comme "/ tmp "est souvent purgé lors du redémarrage. Le concept de persistance du côté client tient et tombe avec la persistance du stockage sur le serveur - qui peut échouer si le répertoire "/ tmp" est utilisé pour les données de session.

Gero
la source
13

Sur Debian (n'est-ce pas le cas pour la plupart des distributions Linux?), Il est enregistré dans / var / lib / php5 /. Comme mentionné ci-dessus, il est configuré dans votre php.ini.

Hans
la source
12

J'utilise Ubuntu et mes sessions sont stockées dans / var / lib / php5.

Vasyl Teraz
la source
1
Merci, c'est tout ce que je voulais. Ouais, s'ils n'étaient pas à l'endroit habituel, je devrais ouvrir les INI, mais je voulais juste savoir "Hé, où sont généralement stockées les sessions ?" / var / lib / php / sessions / c'est le cas.
Eric L.
7

Comme M. Taylor l'a souligné, cela est généralement défini dans php.ini. Ils sont généralement stockés sous forme de fichiers dans un répertoire spécifique.

Brian Fisher
la source
4

Pour ubuntu 16.10, les sessions sont enregistrées dans / var / lib / php / session / ...

Lukáš Kříž
la source
0

Comment ça marche? Comment sait-il que c'est moi?

La plupart des sessions définissent une clé utilisateur (appelée sessionid) sur l'ordinateur de l'utilisateur qui ressemble à ceci: 765487cf34ert8dede5a562e4f3a7e12. Ensuite, lorsqu'une session est ouverte sur une autre page, il scanne l'ordinateur pour une clé utilisateur et s'exécute sur le serveur pour obtenir vos variables.

Si vous effacez par erreur le cache, votre clé utilisateur sera également effacée. Vous ne pourrez plus récupérer vos variables du serveur car vous ne connaissez pas votre identifiant.

Emeka Obianom
la source
0

Dans ma machine Ubuntu, les sessions sont stockées sur

/var/lib/php/sessions

et vous devez sudo lsdans ce répertoire seulement lsil lancera

ls: impossible d'ouvrir le répertoire '.': Autorisation refusée

Et sur mon serveur Windows Wamp, les sessions php sont stockées dans

C:\wamp64\tmp

et si vous installez php autonome sur Windows, aucune valeur n'est définie par défaut

session.save_path => no value => no value
Ali A. Dhillon
la source