Esta solução para caches vs cookies vai me colocar em apuros?

23

Eu criei uma solução provisória para um problema não exatamente comum, mas longe de um problema sem precedentes, com a interação de soluções populares de armazenamento em cache do WP com cookies, neste caso os cookies padrão de comentário do WP. Minha solução também incorpora a exceção "usuários conhecidos" raramente bem definida à exibição de arquivos em cache. Quer seja utilizável ou não, acho que explicá-lo e possivelmente aprender por que essa é uma má ideia pode ser geralmente instrutivo.

Eu testei meu método com o WP Super Cache, o W3 Total Cache e o Comet Cache. O que eu resolvi detalhadamente enquanto estudava esse problema foi WP Super Cache ("WPSC" daqui em diante), então vou usá-lo como meu exemplo principal.

ANTECEDENTES

Quando um thread de comentário padrão do WP é definido para permitir comentários aos visitantes, os cookies de comentários são definidos para qualquer comentarista que não seja um usuário registrado e esteja conectado, com privilégios de comentários reais sujeitos a verificações adicionais. No que acredito ser a configuração mais comum, um comentarista precisa fornecer apenas um nome e um endereço de e-mail. Eles são armazenados em dois cookies de navegador, geralmente comment_author_ . COOKIEHASH e comment_author_email_ . COOKIEHASH . COOKIEHASH é definido de acordo com as opções do usuário.

Se definido para entregar arquivos recém-gerados para "usuários conhecidos", o WPSC determina se deve ou não exibir um arquivo em cache com base em várias verificações: usuários conectados obtêm arquivos novos e visitantes "que podem comentar. " Os últimos são identificados principalmente pela presença em seus navegadores de comment_author_ cookies que não são especificamente ou exclusivamente identificados para o usuário em particular pelo COOKIEHASH (normalmente, mas nem sempre uma versão codificada em MD5 do siteurl) registrada no site opções).

O que parece ser a parte principal do código WPSC, de wp-cache-phase1.php LL371-383, usa um padrão RegEx para obter uma string, percorrendo os 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);
}

Agora, se eu estivesse trabalhando estritamente em PHP, poderia reproduzir ou conectar-me a funções principais do WP e obter o% normalcomment_author_ . COOKIEHASH definido pelo modelo de comentário, mas estou trabalhando no jQuery usando o plug-in Cookie do jQuery em. No entanto, como você pode ver se observar o RegEx, a função WPSC não se importa com o COOKIEHASH : fica satisfeito se encontrar comment_author_ .

MINHA SOLUÇÃO TENTATIVA

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

Para quem não conhece o cookie da jQuery: O item acima define um cookie de sessão simples com chave = comment_author_proxyhash e valor = proxy_author , bom para todo o site. (Além disso, para aqueles que usam jQuery Cookie e WP, além de pré-substituir o familiar jQuery $ para o WP jQuery , eu também já defini $.cookie.raw = true; .)

Eu adicionei a linha ao meu script jQuery e, voila! , WPSC, W3 Total Cache e Comet Cache estão todos agindo como eu quero que eles façam. Depois de usar o script e recarregar, recebo novas páginas. Se acontecer de eu colocar um comentário real, os cookies normais de comment_author_ e comment_author_email_ estão definidos, e não parece haver nenhum problema com a coexistência.

Talvez um defeito seja que o cookie "proxyhash" irá viajar com o usuário enquanto ele mantiver a sessão aberta, mas isso não me parece um grande problema - ou até vale a pena um aviso. Eu certamente nunca ouvi falar de alguém reclamando sobre tal coisa acontecendo com um dos cookies regulares.

Mas talvez haja algo que eu esteja perdendo e prestes a descobrir muito para o meu sofrimento, se possível para a minha edificação também. Ou talvez haja uma maneira prática relativamente simples de replicar o COOKIEHASH no jQuery, também abordando casos de uso alternativos ... ou para obter o mesmo efeito final por outros meios - outras maneiras de enganar os plug-ins do cache tratando o visitante como um comentarista ...

Se não, há alguma boa razão para NÃO colocar isso ou algo próximo a ele em um plug-in?

    
por CK MacLeod 30.11.2016 / 01:15
fonte

1 resposta

0

Sua solução com o comment_author_proxyhash cookie naturalmente funcionará tecnicamente - todos os plugins de cache que eu conheço não analisam o valor de hash e apenas interrompem a entrega de conteúdo em cache com base em comment_author_ * cookie presense.

O problema aqui é que a funcionalidade de cache de páginas é algo que os sites realmente precisam e muitas vezes o cache de páginas é configurado exatamente porque o desempenho do WordPress não é suficiente e capaz de travar servidores em horários de pico. Depende da natureza do conteúdo do site, mas os proprietários do site às vezes não conseguem pagar pelo hardware necessário para lidar com tudo via código PHP / WP. Em outras palavras, tanto quanto possível, o tráfego deve ser servido a partir do cache de páginas sempre que possível. De prática eu posso dizer que muitas vezes temos que identificar e desativar plugins fazendo exceções de cache.

Claro que nem sempre é possível, mas tente trabalhar com a página em cache sempre que possível. Por exemplo, você pode ocultar div tags com comentários que deseja ignorar por meio de javascript ou bloco de comentários inteiros ajax-ify.

Em qualquer caso, você não precisa marcar o visitante como um comentador, mas parar o armazenamento em cache por causa de seus motivos lógicos personalizados. Portanto, é melhor usar um cookie exclusivo e torná-lo um sinal de exceção de cache. O W3 Total Cache tem a opção "Rejeitar cookies" para isso, mas não outros plugins da sua lista, então você precisará de um hack como o que você sugeriu.

    
por WowPress.host 25.01.2018 / 19:18
fonte