Maison  >  Article  >  développement back-end  >  Exemple d'analyse du verrouillage de session en PHP pour éviter le blocage des requêtes

Exemple d'analyse du verrouillage de session en PHP pour éviter le blocage des requêtes

黄舟
黄舟original
2017-08-08 09:29:001253parcourir

Cet article présente principalement la méthode PHP pour empêcher le blocage des requêtes basées sur les verrous de session. Il analyse l'utilisation des verrous de session php et les techniques d'exploitation associées pour empêcher le blocage des requêtes sous forme d'exemples. Les amis dans le besoin peuvent se référer à

Cet article L'exemple décrit comment PHP empêche le blocage des requêtes basées sur les verrous de session. Partagez-le avec tout le monde pour votre référence, les détails sont les suivants :

Explication :

Article précédent Problèmes de blocage de session et solutions en programmation PHP Après une brève analyse de la solution au blocage de session PHP, voici une autre solution.

Texte :

Les navigateurs modernes limitent le nombre de connexions simultanées à un hôte à généralement 4 ou 6. Cela signifie que si votre page Web charge des dizaines de fichiers assert (js, images, css) à partir du même hôte, une mise en file d'attente se produira en raison de la limite de concurrence. De la même manière, voire pire, ce problème se produit également dans les scripts PHP qui utilisent des sessions.

Problème :

les sessions php sont stockées dans des fichiers par défaut, lors de la demande d'un fichier php (

) qui doit faire fonctionner le session , ce fichier sera verrouillé par le premier processus qui exploite la session, provoquant le blocage des autres requêtes. D'autres demandes seront en attente à session_start() jusqu'à ce que le fichier de session soit déverrouillé. session_start()

Solution :

Étant donné que le fichier de session verrouillé ne sera pas déverrouillé tant que l'exécution du script n'est pas terminée ou que la session n'est pas fermée normalement, afin de Pour éviter qu'un grand nombre de requêtes php (besoin d'utiliser les données $_SESSION) soit verrouillé, vous pouvez fermer la session immédiatement après l'écriture, libérant ainsi le verrou.

Fermer la session :


session_write_close();
Cette technique est très utile, notamment pour un script dont le traitement est long. Et cette fonction ne fait que fermer la session d'écriture, la lecture est toujours possible.


// 
session_start();
//可以读写session
$_SESSION['latestRequestTime'] = time();
//关闭session
session_write_close();
//读取session
$twitterId = $_SESSION['twitterId'];

Annotation :

Après php5.4,

prend en charge la livraison session_set_save_handlerSessionHandlerInterface, le deuxième paramètre consiste à spécifier comme méthode de rappel (la valeur par défaut est true) et à enregistrer la fonction session_write_close() comme fonction session_write_close(). register_shutdown_function()

L'utilisation de Memcache ou Redis pour stocker des sessions peut résoudre le problème de "verrouillage", mais s'il n'est pas géré correctement, le nombre de connexions augmentera (s'il y a des opérations fastidieuses après l'opération de session, le la connexion ne sera pas Pour le recyclage, vous pouvez effectuer activement l'opération

une fois l'opération d'écriture de session terminée) session_write_close()

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