Cet article partage principalement avec vous un récapitulatif des sessions PHP et des cookies, en espérant aider tout le monde.
1. La relation entre cookie et session
Bien que les solutions de cookie et de session appartiennent respectivement au client et au serveur, la mise en œuvre de la session côté serveur dépend du cookie du client ; comme suit :
1. Le serveur exécute le mécanisme de session
2. Génère un session_id correspondant et unique (en analysant et en traitant ce session_id, le serveur peut trouver le fichier enregistré par la session ; puis extraire les informations de session. à partir du fichier)
3. Le serveur enverra cet identifiant de session au client
Le client recevra l'identifiant de session et l'enregistrera dans un cookie en tant que conteneur de stockage
4. request Cet identifiant de session sera apporté au serveur à chaque fois
Le serveur analyse la session par lui-même
Remarque : Il existe de nombreuses façons de sauvegarder des informations dans une session : cache, base de données, fichier, etc. la valeur par défaut est de l'enregistrer sous forme de fichier. . .
2. Le timing de création et de destruction des sessions
Lors de la création d'une session, un cookie sera créé avec un MaxAge de -1, ce qui signifie qu'il ne peut exister qu'en mémoire. Lorsque les cookies sont désactivés sur le navigateur, ce cookie sera toujours créé.
Lorsque la requête soumise par le navigateur contient le paramètre jsessionid ou l'en-tête de cookie, le conteneur ne crée plus de nouvelle session, mais trouve uniquement la session précédente pour association. Il y a deux situations ici :
1) Utilisez jsessionid. Si cette valeur peut correspondre à une session existante, aucune nouvelle session ne sera créée. Dans le cas contraire, une nouvelle session sera quand même créée.
2) Utilisez des cookies. Si cette valeur peut correspondre à une session existante, aucune nouvelle session ne sera créée ; mais s'il n'y a pas de session correspondant (comme après le redémarrage du serveur ci-dessus) le conteneur restaurera la session correspondante en fonction des informations du cookie, comme si c'était le cas. c'était pareil avant.
3. Quand la séance est-elle détruite ?
Lorsque nous fermons le navigateur, l'ouvrons à nouveau et nous connectons au serveur, le serveur allouera une nouvelle session, ce qui signifie qu'une nouvelle session sera démarrée. Alors la session originale est-elle détruite ? J'ai fait une petite expérience :
Créez une session :
session_start();//Enregistrez la variable de session et attribuez $_SESSION["username"] = "hello"//Génération de sortie session_idecho session_id();
Visitez la page pour créer une session, obtenez le session_id, fermez le navigateur;
Créez un objet de session basé sur session_id
$session_id = "qpk6onnn3husvotnke030ftcm4"; session_id($session_id); session_start(); echo $_SESSION["username"]; //结果取出session
Donc
Lorsque le navigateur est fermé, la session d'origine n'est pas détruite (la méthode destroy n'est pas exécutée), mais la session est détruite jusqu'à l'expiration du délai d'attente. La fermeture du navigateur efface uniquement les cookies liés à la session d'origine dans la mémoire du client. Lorsque le navigateur est rouvert pour se connecter, le navigateur ne peut pas envoyer d'informations sur les cookies, le serveur pensera donc qu'il s'agit d'une nouvelle session. Par conséquent, s'il existe certaines ressources associées à la session que vous souhaitez nettoyer à la fermeture du navigateur (comme les fichiers temporaires, etc.), vous devez envoyer une requête spécifique au serveur au lieu d'attendre que la session soit automatiquement nettoyé.
Recommandations associées :
php implémente la page d'enregistrement de connexion des membres avec HTML plus Session et Cookie
implémente le transfert de données de session et de cookie dans Fonction PHP Value
php apprenant la différence entre session et cookie
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!