Maison  >  Article  >  développement back-end  >  Solution au problème de blocage de session en php

Solution au problème de blocage de session en php

黄舟
黄舟original
2017-08-08 09:41:241385parcourir

Cet article présente principalement le problème et la solution du blocage de session dans la programmation PHP. Il analyse brièvement les principes, les raisons et les solutions simples du blocage de session PHP. Les amis dans le besoin peuvent se référer aux

exemples suivants. Cet article décrit les problèmes de blocage de session et les solutions dans la programmation PHP. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Lors de l'utilisation de la session, après l'ouverture de la session, si le même navigateur exécute le même programme, différentes pages seront verrouillées. Cela ne se produit pas dans différents navigateurs.

Question : Est-ce que session_start est à l'origine du blocage ?

J'ai donc écrit quelques pages et les ai testées, et j'ai découvert que cette session provoquait le blocage, tandis que les deux autres situations ne provoquaient pas le blocage.

J'ai vérifié la liste des bogues PHP et j'ai découvert que quelqu'un avait soulevé cette question :

Description :
------------
Appel session_start() semble attendre la sortie d'autres scripts

qui utilisent la même session, je suppose que la 1ère requête verrouille le
fichier de session pour un usage exclusif, et la seconde. demander des blocs jusqu'à ce qu'il
peut l'ouvrir.

La réponse officielle de PHP est :

Merci d'avoir pris le temps de nous écrire, mais ce n'est pas un bug. C'est normal, le fichier de session est verrouillé pour éviter toute corruption.

combine le mécanisme de session de PHP pour trouver la cause du blocage. Étant donné que les informations de session PHP sont écrites dans des fichiers, un client occupe un fichier de session. Par conséquent, lorsque session_start est appelé, le fichier est verrouillé, et il est verrouillé en mode lecture-écriture (car il peut être nécessaire de modifier la valeur de la session dans le programme). De cette façon, le deuxième appel à session_start est bloqué. .

La solution la plus simple :

J'ai vérifié le manuel PHP et j'ai trouvé une fonction session_write_close, qui écrit les données de session et termine la session, c'est-à-dire écrit les données de session et fermez la session en même temps. Par conséquent, une fois la session terminée, nous pouvons appeler cette fonction pour fermer le fichier de session afin de le déverrouiller. Généralement, la session est utilisée pour enregistrer les informations d'identité de l'utilisateur afin que PHP puisse effectuer l'authentification de l'identité. Par conséquent, la lecture et l'écriture de la session peuvent être placées au début de l'exécution de la page. Après l'exécution, la fonction session_write_close peut être appelée immédiatement. .

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn