En général, il n'y a aucun moyen de conserver des informations simultanées sur l'état de la session pour tous les utilisateurs sans subir de grandes pertes de performances. Comme vous l'avez déjà dit, ceci est dû au fait que vous ne pouvez pas terminer une session correctement une fois.
À ce stade, vous avez deux options:
1. Lancez un travail cron (déterministe)
Vous pouvez configurer une tâche cron pour exécuter aussi souvent que vous avez besoin. Cela garantira que l'information que vous avez est au plus aussi vieille que l'intervalle cron.
2. Régler la session GC probabilité
Réglage des session.gc_probability
et session.gc_divisor
options de PHP vous permet de spécifier une probabilité avec laquelle le nettoyage de la session sera lancé à chaque demande. Généralement, il s'agit d'une valeur relativement faible (par exemple, 1/100) car, à des charges de serveur très élevées, il peut tuer votre performance très rapidement.
Les avantages de cette approche sont qu'elle est intégrée et qu'elle ne vous coûte rien si votre serveur n'est pas réellement touché par les utilisateurs.
Le principal inconvénient est que la probabilité doit toujours être ajustée en tenant compte du nombre de requêtes/s sur votre serveur, ce qui n'est pas une constante. D'autres inconvénients sont le fait qu'il dépend des requêtes pour fonctionner réellement (ne nettoiera jamais les sessions si personne ne visite votre serveur) et que c'est un paramètre global (fonctionne sur l'ensemble du serveur, pas sur l'ensemble de l'application).
À quel point est-ce important pour vous? Il y a un mécanisme intégré en place qui fait cela, mais vous devez équilibrer les performances et avoir des informations à jour. – Jon
Avoir des informations à jour est un must, en plus il est également nécessaire de laisser un seul utilisateur se connecter. – elibanon
Il n'y a aucun moyen d'avoir des informations à jour sans encourir un coup de perf. C'est juste comment fonctionnent les sessions HTTP. – Jon