Gestion de cache PHP

Eléphanteau du PHP | 40 Messages

28 mars 2019, 17:45

Bonjour

Sur une plateforme développée en PHP/joomla3.8 qui tourne depuis plusieurs années, nous rencontrons depuis peu des problèmes de cache inédits. La plateforme gère les évaluations de classes d'étudiants. Pour chaque étudiant elle publie la liste des évaluations publiées qui est généralement la même pour tous les élèves d'une classe.
On me signale depuis quelque temps des cas isolés d'étudiants ne voyant pas toutes les évaluations. Profitant d'un cas en temps réel qu'on me signale je craque le MP de l'étudiant et me logue à sa place et, surprise je vois toutes ses évaluations. On fait dire à l'étudiant de supprimer son cache et l'évaluation qui manquait lui apparait.

Problème de cache donc. Mais comment expliquer que 15 étudiants qui se connectent en même temps ne voient pas la même chose et que l'un deux mette en cache une page où il manque la dernière ligne ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8455 Messages

29 mars 2019, 00:37

Regarde les entêtes HTTP quand tu charges la page problématique : Ctrl+Maj+i dans Firefox ou Chrome, puis onglet réseau et recharger la page.
En cliquant sur le nom de la page, tu verras les entêtes de la réponse du serveur, tu peux regarder si certaines de ces entêtes indique au navigateur de conserver cette page dans son cache pendant un certain temps.

Si c'est le cas, et que la valeur est trop élevée, il faut que tu la modifies dans la config de ton serveur (ou via la fonction PHP header() pour indiquer l'entête que tu veux).
http://php.net/header
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 40 Messages

29 mars 2019, 10:55

Merci pour cette réponse.
Voici les headers affichés pour la page en question:

Code : Tout sélectionner

cache control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0 Connection: Keep-Alive ... Date: Fri, 29 Mar 2019 08:32:04 GMT Expires:"Wed, 17 Aug 2005 00:00:00 GMT" Last-Modified:"Fri, 29 Mar 2019 08:32:05 GMT" ... Pragma:"no-cache"
Sauf erreur d'interprétation la page ne devrait pas être cachée.

D'autre part si la page a été cachée, comment l'a-t-elle été avec une ligne en moins ?
Le serveur a envoyé une liste de 13 lignes que 15 étudiants ont intégralement reçues. Seul un 16eme étudiant a affiché les 12 premières lignes, et lorsqu'il a effacé son cache navigateur la 13eme est apparue et lorsque je me suis logué avec ses identifiants depuis un autre ordinateur l'au vu les 13 lignes.
Je n'arrive pas à imaginer le scénario.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 8455 Messages

29 mars 2019, 14:53

Effectivement avec des entêtes comme celles-ci, ce n'est pas le cache du navigateur qui a pu faire cela.
Ça peut éventuellement être un cache au niveau de ton hébergement (cdn type cloudflare) ou au niveau du réseau local de ton étudiant (reverse proxy d'école qui déconne).
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 40 Messages

29 mars 2019, 17:44

Il n'y a pas de CDN sur ce site. Par contre on a remarqué que ces erreurs ne concernaient qu'une université parmi plusieurs donc la piste d'un proxy semble possible. Mais quelles circonstances feraient qu'un proxy perdrait la dernière ligne d'une liste dans une page web ?
Comment identifier la présence d'un proxy ?
Comment est-ce que l'effacement du cache navigateur pourrait réinitialiser celui du proxy ?