J'ai trouvé une solution provisoire pour un problème pas exactement commun, mais loin d'être sans précédent avec l'interaction des solutions de mise en cache WP populaires avec les cookies, dans ce cas les cookies de commentaire WP standard. Ma solution porte également sur l'exception des "utilisateurs connus" rarement bien définie pour la diffusion de fichiers en cache. Que ce soit utilisable ou non, je pense que l'expliquer et peut-être apprendre pourquoi c'est une mauvaise idée pourrait être généralement instructif.
J'ai testé ma méthode avec WP Super Cache, W3 Total Cache et Comet Cache. Celui que j'ai analysé en détail en étudiant ce problème était WP Super Cache ("WPSC" ci-après), donc je vais l'utiliser comme mon exemple principal.
CONTEXTE
Lorsqu'un fil de commentaires standard WP est défini pour permettre aux visiteurs de commenter, des cookies de commentaires sont définis pour tout commentateur qui n'est pas un utilisateur enregistré et connecté, avec des privilèges de commentaires réels soumis à des vérifications supplémentaires. Dans ce que je pense être la configuration la plus courante, un commentateur doit fournir uniquement un nom et une adresse e-mail. Ceux-ci sont généralement stockés dans deux cookies de navigateur comment_author_ . COOKIEHASH
et comment_author_email_ . COOKIEHASH
. COOKIEHASH
est défini en fonction des options utilisateur.
S'il est configuré pour fournir des fichiers fraîchement générés à des «utilisateurs connus», WPSC détermine s'il faut ou non servir un fichier mis en cache sur la base de plusieurs vérifications: les utilisateurs connectés obtiennent de nouveaux fichiers, tout comme les visiteurs «qui peuvent commenter». Ces derniers sont principalement identifiés par la présence dans leurs navigateurs de comment_author_
cookies qui ne sont pas spécifiquement ou uniquement identifiés pour l'utilisateur particulier par le COOKIEHASH
(généralement mais pas toujours une version encodée MD5 du "siteurl" enregistrée dans les options du site).
Ce qui semble être l'élément clé du code WPSC, à partir de wp-cache-phase1.php LL371-383, utilise un modèle RegEx pour obtenir une chaîne, en parcourant les cookies:
$regex = "/^wp-postpass|^comment_author_";
if ( defined( 'LOGGED_IN_COOKIE' ) )
$regex .= "|^" . preg_quote( constant( 'LOGGED_IN_COOKIE' ) );
else
$regex .= "|^wordpress_logged_in_";
$regex .= "/";
while ($key = key($_COOKIE)) {
if ( preg_match( $regex, $key ) ) {
wp_cache_debug( "wp_cache_get_cookies_values: $regex Cookie detected: $key", 5 );
$string .= $_COOKIE[ $key ] . ",";
}
next($_COOKIE);
}
Maintenant, si je travaillais strictement en PHP, je pourrais reproduire ou accrocher les fonctions de base de WP, et obtenir la valeur normale comment_author_ . COOKIEHASH
définie par le modèle de commentaire, mais je travaille en jQuery en utilisant le plug-in jQuery Cookie. Cependant, comme vous pouvez le voir si vous regardez le RegEx, la fonction WPSC ne se soucie pas du COOKIEHASH
: elle est satisfaite si elle rencontre comment_author_
.
MA SOLUTION TENTATIVE
$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );
Pour ceux qui ne connaissent pas le cookie jQuery: ce qui précède définit un cookie de session simple avec clé = comment_author_proxyhash
et valeur = proxy_author
, bon pour l'ensemble du site. (De plus, pour ceux qui utilisent jQuery Cookie et WP, en plus de pré-substituer le jQuery familier $
au WP jQuery
, j'ai également déjà défini $.cookie.raw = true;
.)
J'ai ajouté la ligne à mon script jQuery, et le tour est joué! , WPSC, W3 Total Cache et Comet Cache agissent tous comme je le souhaite. Après avoir utilisé le script et rechargé, j'obtiens de nouvelles pages. S'il m'arrive de placer un vrai commentaire, la normale comment_author_
et les comment_author_email_
cookies sont définis, et il ne semble pas y avoir de problème de coexistence.
Un défaut serait peut-être que le cookie "proxyhash" voyagera avec l'utilisateur tant qu'il ou elle gardera la session ouverte, mais cela ne me semble pas être un problème majeur - ni même un avertissement. Je n'ai certainement jamais entendu parler de quelqu'un se plaindre d'une telle chose se produisant avec l'un des cookies habituels.
Mais peut-être qu'il me manque quelque chose, et que je suis sur le point de découvrir beaucoup de choses à mon malheur, peut-être aussi à mon édification. Ou peut-être qu'il existe un moyen relativement simple de meilleures pratiques pour répliquer le COOKIEHASH
dans jQuery, couvrant également des cas d'utilisation alternatifs ... ou pour obtenir le même effet final par d'autres moyens - d'autres façons de tromper les plug-ins de mise en cache pour traiter le visiteur en tant que commentateur ...
Sinon, y a-t-il une bonne raison de NE PAS pousser ceci ou quelque chose de proche vers l'univers dans un plug-in?
wp_localize_script
pour passer le hachage de cookie à votre Javascript afin que vous puissiez utiliser le cookie "natif" au lieu du proxyhash. Sinon, c'est un problème très intéressant et votre solution semble solide, bien que les cookies + le cache soient toujours si complexes qu'il est difficile de dire si c'est "la bonne" solution ou s'il manque quelque chose. Grande recherche!Réponses:
Votre solution avec le cookie comment_author_proxyhash fonctionnera bien sûr techniquement - tous les plugins de mise en cache que je connais n'analysent pas la valeur de hachage et arrêteront simplement la livraison du contenu mis en cache en fonction de la présence du cookie comment_author_ *.
Le problème ici est que la fonctionnalité de mise en cache des pages est quelque chose dont les sites Web ont vraiment besoin et souvent la mise en cache des pages est configurée exactement parce que les performances WordPress nues ne sont pas suffisantes et peuvent même planter le serveur aux heures de pointe. Cela dépend de la nature du contenu du site Web, mais les propriétaires de sites ne sont parfois tout simplement pas en mesure de payer le matériel nécessaire pour tout gérer via le code PHP / WP. En d'autres termes, autant que possible, le trafic doit être servi à partir du cache de pages. De la pratique, je peux dire que nous devons souvent identifier et désactiver les plugins faisant des exceptions de cache.
Bien sûr, ce n'est pas toujours possible, mais essayez de travailler avec la page en cache autant que possible. Par exemple, vous pouvez masquer des
div
balises avec des commentaires que vous souhaitez ignorer via javascript ou le bloc de commentaires entier ajax-ify.Dans tous les cas, vous n'avez pas besoin de marquer le visiteur comme un commentateur, mais arrêtez la mise en cache pour vos raisons de logique personnalisée. Il est donc préférable d'utiliser un cookie unique et d'en faire un signal d'exception de cache. W3 Total Cache a l'option "Rejeter les cookies" pour cela, mais pas d'autres plugins de votre liste, vous aurez donc besoin d'un hack comme celui que vous avez suggéré.
la source