¿Esta solución para cachés frente a cookies va a tener problemas?

23

He encontrado una solución provisional para un problema no muy común, pero lejos de ser un problema sin precedentes con la interacción de las populares soluciones de almacenamiento en caché WP con las cookies, en este caso, las cookies de comentarios estándar de WP. Mi solución también tiene que ver con la excepción raramente bien definida de "usuarios conocidos" al servicio de archivos en caché. Si es utilizable o no, me imagino que explicarlo y posiblemente aprender por qué es una mala idea puede ser generalmente instructivo.

He probado mi método con WP Super Cache, W3 Total Cache y Comet Cache. El que analicé en detalle mientras estudiaba este problema fue WP Super Cache ("WPSC" en adelante), así que lo usaré como mi ejemplo principal.

ANTECEDENTES

Cuando un hilo de comentarios estándar de WP se configura para permitir a los visitantes comentar, las cookies de comentarios se establecen para cualquier comentarista que no sea un usuario registrado y haya iniciado sesión, con privilegios reales de comentarios sujetos a verificaciones adicionales. En mi opinión, la configuración más común es que un comentarista solo debe proporcionar un nombre y una dirección de correo electrónico. Estas se almacenan dentro de dos cookies del navegador, generalmente comment_author_ . COOKIEHASH y comment_author_email_ . COOKIEHASH . COOKIEHASH se define de acuerdo con las opciones del usuario.

Si se configura para entregar archivos recién generados a "usuarios conocidos", WPSC determina si debe servir un archivo en caché en base a varias comprobaciones: los usuarios registrados obtienen archivos nuevos, y también los visitantes que pueden comentar. " Las últimas se identifican principalmente por la presencia en sus navegadores de comment_author_ cookies que no están identificadas de forma específica o única para el usuario en particular por el COOKIEHASH (generalmente, pero no siempre, una versión codificada en MD5 de "siteurl" registrada en el sitio opciones).

Lo que parece ser la parte clave del código WPSC, de wp-cache-phase1.php LL371-383, usa un patrón RegEx para obtener una cadena, alternando entre las 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);
}

Ahora, si estuviera trabajando estrictamente en PHP, podría volver a producir o enlazar las funciones principales de WP y obtener el comment_author_ . COOKIEHASH normal establecido por la plantilla de comentarios, pero estoy trabajando en jQuery utilizando el conector jQuery Cookie. en. Sin embargo, como puede ver si mira RegEx, a la función WPSC no le importa el COOKIEHASH : se satisface si encuentra comment_author_ .

MI SOLUCIÓN TENTATIVA

$.cookie( 'comment_author_proxyhash', 'proxy_author', { path: '/' } );

Para aquellos que no están familiarizados con jQuery Cookie: Lo anterior establece una cookie de sesión simple con la clave = comment_author_proxyhash y value = proxy_author , válida para todo el sitio. (También, para aquellos que usan jQuery Cookie y WP, además de sustituir previamente a la familiar jQuery $ para el WP jQuery , también ya he establecido $.cookie.raw = true; .)

Agregué la línea a mi secuencia de comandos jQuery y voila! , WPSC, W3 Total Cache y Comet Cache están actuando como quiero. Después de usar el script y volver a cargar, obtengo páginas nuevas. Si coloco un comentario real, se establecen las cookies normales comment_author_ y comment_author_email_ , y no parece haber ningún problema con la coexistencia.

Quizás un defecto sería que la cookie "proxyhash" viajará con el usuario siempre y cuando él o ella mantenga la sesión abierta, pero eso no me parece un problema importante, o incluso una advertencia. Desde luego, nunca he oído que alguien se queje de que ocurra algo así con una de las cookies habituales.

Pero tal vez haya algo que me esté faltando, y que esté por descubrir mucho para mi desgracia, y potencialmente también para mi edificación. O tal vez haya una manera relativamente simple y práctica de replicar el COOKIEHASH en jQuery, que también cubra casos de uso alternativos ... o lograr el mismo efecto final por otros medios: otras formas de engañar a los complementos de almacenamiento en caché. tratando al visitante como un comentarista ...

Si no, ¿hay alguna buena razón para NO enviar esto o algo parecido al universo en un complemento?

    
pregunta CK MacLeod 30.11.2016 - 01:15

1 respuesta

0

Su solución con el cookie comment_author_proxyhash funcionará técnicamente, todos los complementos de almacenamiento en caché que conozco no analizan el valor de hash y solo detendrán la entrega del contenido almacenado en caché basado en comment_author_ * cookie presense.

El problema aquí es que la funcionalidad de almacenamiento en caché de la página es algo que los sitios web realmente necesitan y, a menudo, el almacenamiento en caché de la página está configurado exactamente porque el rendimiento de WordPress no es suficiente y puede incluso bloquear el servidor en las horas punta. Depende de la naturaleza del contenido del sitio web, pero los propietarios del sitio a veces simplemente no pueden pagar por el hardware requerido para manejar todo a través del código PHP / WP. En otras palabras, siempre que sea posible, el tráfico debe ser servido desde la memoria caché de la página. De la práctica puedo decir que a menudo tenemos que identificar y deshabilitar complementos que hacen excepciones de caché.

Por supuesto, no siempre es posible, pero intente trabajar con la página almacenada en caché siempre que sea posible. Por ejemplo, puede ocultar las etiquetas div con los comentarios que desee ignorar mediante javascript o el bloque de comentarios completos ajax-ify.

En cualquier caso, no es necesario que marque el visitante como un comentarista, pero detenga el almacenamiento en caché debido a sus razones lógicas personalizadas. Así que es mejor usar una cookie única y convertirla en una señal de excepción de caché. W3 Total Cache tiene la opción "Rechazar cookies" para eso, pero no otros complementos de tu lista, por lo que necesitarás un hack como el que sugeriste.

    
respondido por el WowPress.host 25.01.2018 - 19:18

Lea otras preguntas en las etiquetas