web-dev-qa-db-fra.com

Mise en cache: Forcer le nouveau contenu pour les utilisateurs connectés (éventuellement en ajoutant une variable de requête à l'URL)

Si un utilisateur déconnecté visite une page, puis la revisite une fois connecté, la version en cache s'affichera. Il y a une question fermée similaire à celle-ci avec une réponse qui suggère de définir Cache Control sur no-cache. Cela affectera déconnecté utilisateurs, ce qui annulera l'objectif de la mise en cache.

Le problème

Lors de l'utilisation de la mise en cache de la page/du navigateur avec T3 Total Cache ou probablement d'autres plugins de mise en cache, si vous avez déjà visité une page lorsque vous vous êtes déconnecté, la même version de la page déconnectée vous sera présentée, sauf si vous actualisez la page.

Vous pouvez reproduire ce problème en:

  1. Avoir la mise en cache activée. Ensuite, en mode incognito, visitez un post.

  2. Connectez-vous au site, puis tapez manuellement l'URL de cette publication dans la barre d'adresse. La version déconnectée de la page devrait apparaître.

Ceci est évidemment un problème que vous avez des fonctionnalités disponibles pour les utilisateurs connectés uniquement (comme les commentaires, le vote, etc.) ...

Solution potentielle

La seule solution potentielle que j'ai est d'ajouter une variable de requête à l'URL à chaque demande. Par exemple en ajoutant une valeur aléatoire:

$key = Rand();
$new_url = esc_url( add_query_arg( 'foo', $key ) );

Je sais comment ajouter manuellement cette variable à des requêtes uniques, mais au lieu de modifier chaque instant de liens, existe-t-il un moyen de le forcer à chaque URL pour les utilisateurs connectés?

Remarque: Je ne suis pas sûr que ce soit l'approche idéale pour résoudre ce problème (c'est assez désespéré), alors n'hésitez pas à poster une réponse avec une meilleure solution.

5
Christine Cooper

Puisque vous avez déjà activé l'option "Ne pas mettre en cache les pages des utilisateurs connectés", pourquoi ne pas sélectionner cache with validation sous Cache Control Policy pour le contenu "HTML"?

Explication: En gros, l'option "Ne pas mettre en cache les pages des utilisateurs connectés" devrait déjà envoyer un en-tête no-cache pour les utilisateurs connectés uniquement.

Si un utilisateur a une page mise en cache dans son navigateur (en tant qu'utilisateur non connecté) et tente ensuite d'accéder à la même page une fois connecté, l'option cache with validation de votre paramètre "Politique de contrôle du cache" pour le contenu HTML doit envoyer la balise must-revalidate. .

Par conséquent, un utilisateur connecté enverrait no-cache,must-revalidate, demandant toujours une nouvelle page.

C'est à peu près ce que @gmazzap a expliqué avec des en-têtes - mais du point de vue de la configuration de W3 Total Cache.

4
E. Serrano