Os cookies foram inventados pela primeira vez em 1994 por um programador de computador chamado Lou Montulli. Sem eles, a teia seria um lugar bem diferente. Se você entrar no back-end do seu site WordPress ou fechar uma janela popup irritante, você usa e interage com cookies todos os dias (mesmo que você não perceba).

Até agora, você provavelmente já adivinhou que quando nos referimos a cookies, queremos dizer os cookies usados para armazenar informações importantes do visitante em um site, não o tipo de cookies de chocolate delicioso. 🍪

Hoje vamos mergulhar no tópico por vezes confuso dos cookies e das sessões PHP. Especificamente, tudo o que você precisa saber sobre como o WordPress os usa, juntamente com alguns problemas comuns que você deve estar ciente (especialmente como um desenvolvedor) quando se trata de hospedagem de seu site, código personalizado, ou usando um plugin de terceiros. Na nossa opinião, este assunto não é suficientemente discutido.

Tipos de Cookies

Existem dois tipos diferentes de cookies que são normalmente definidos: cookies de sessão e cookies persistentes.

Cookies de sessão

Os cookies de sessão, também conhecidos como cookies transitórios, são temporários. Eles não têm uma data de validade anexada e apenas armazenam informações sobre o que o usuário faz durante uma única sessão. Uma sessão é simplesmente um valor gerado aleatoriamente/exclusivo que é atribuído quando alguém visita um site. Os cookies de sessão são armazenados temporariamente na memória e são automaticamente removidos quando o navegador fecha ou a sessão termina.

Leitura sugerida: Como melhorar o limite de memória PHP no WordPress.

Cookies Persistentes

Os cookies persistentes, como você poderia ter adivinhado, são aqueles que contêm uma data de validade. Estes duram muito mais por muito mais tempo e são armazenados no disco até que expirem ou sejam limpos manualmente pelo usuário. Estes também são por vezes referidos como “cookies de rastreamento”, uma vez que estes são os tipos de cookies que o Google Analytics, AdRoll, Stripe, etc. utilizam.

Nosso programa de afiliados Kinsta é outro exemplo. Um cookie de 60 dias é colocado no navegador do usuário quando ele clica em um link de afiliado. Isso garante que o referrer recebe o crédito adequado, mesmo que a pessoa tenha fechado e reaberto seu navegador várias vezes.

Como o WordPress Core usa cookies

Quando nos referimos ao núcleo do WordPress, queremos dizer simplesmente os arquivos que compõem o projeto open source, antes de instalar quaisquer plugins ou temas de terceiros. É o WordPress no seu estado natural, como gostamos de lhe chamar.

Agora que você sabe o básico do que é um cookie e os diferentes tipos, vamos dar uma olhada em por que e como núcleo WordPress usa-los para fazer toda a magia que acontece nos bastidores. Facto engraçado: O cookie foi originalmente derivado do termo “cookie mágico”.

O WordPress core utiliza cookies para duas finalidades diferentes:

1. Cookies de Login

Os cookies de login contêm detalhes de autenticação e são usados quando um usuário efetua login no painel de administração do WordPress. De acordo com o WordPress Codex, um par de cookies de sessão diferentes são definidos:

  • No login, o WordPress usa o cookie wordpress_[hash] para armazenar detalhes de autenticação (limitado à área /wp-admin/).
  • Após o login, o WordPress define o cookie wordpress_logged_in_in_[hash]. Isso indica quando você está conectado e quem você é.

Quando você tenta acessar o back-end do seu site WordPress, uma verificação é feita para ver se os dois cookies acima existem e ainda não expiraram. Isto é o que lhe permite contornar magicamente a tela wp-login.php. 😉

O WordPress também define os cookies wp-settings-{time}-[UID]. O ID é o seu ID de usuário da tabela de banco de dados de usuários do WordPress. Isso armazena as configurações do painel pessoal e da interface de administração.

2. Cookies de comentários

Por padrão, há cookies definidos quando alguém comenta em um post de blog (com uma validade de 347 dias). Isto é assim se eles voltarem mais tarde não têm de preencher toda a informação novamente. Os seguintes três cookies são armazenados:

  • comment_author_[hash]
  • comment_author_email_[hash]
  • comment_author_url_[hash]

No entanto, com as recentes mudanças na política de privacidade devido ao GDPR, novas ferramentas foram introduzidas pelo núcleo do WordPress para garantir que você deixe os usuários optarem por esses cookies sendo configurados. Essa configuração, se ainda não estiver definida, pode ser ativada em “Configurações → Discussão” no painel de administração do WordPress. Selecione a opção “Mostrar comentários, cookies, opção de inclusão.” O popular plugin Akismet também permite que você exiba uma nota de privacidade.

como os comentários cookies opt-in
Como os comentários cookies opt-in

Como plugins e temas de terceiros do WordPress usam cookies

Assim como o WordPress usa cookies para determinadas funcionalidades, plugins de terceiros e temas que você instala também definem cookies. A maioria deles usa uma combinação de cookies do navegador e linhas de banco de dados armazenados na tabela wp_options ou em sua própria tabela personalizada. Isto é porque o WordPress é apátrida.

Um aplicativo stateless é um programa de aplicação que não salva dados do cliente gerados em uma sessão para uso na próxima sessão com esse cliente. Cada sessão é executada como se fosse a primeira vez e as respostas não dependem dos dados de uma sessão anterior. – TechTarget

Com as novas leis de privacidade, é mais importante do que nunca entender realmente quais cookies estão sendo configurados e se eles estão fornecendo uma maneira para seus visitantes optarem por entrar. Dica: nem todos os cookies requerem opt-in. Leia o nosso artigo aprofundado sobre o RGPD para compreender melhor as novas exigências.

Aqui estão apenas alguns dos muitos exemplos de como os cookies são usados:

  • Se você tiver uma caixa popup no seu site do WordPress e um visitante a fechar, isso normalmente irá definir um cookie para que ele não volte novamente.
  • Itens adicionados a um carrinho de compras no seu site de comércio electrónico. Um cookie é armazenado para que o carrinho de compras mantenha seus produtos enquanto você continua a navegar pelo site.
  • Os recursos Geolocalização IP podem armazenar o endereço IP e as coordenadas de latitude/longitude do visitante que está navegando no site. Isso é tipicamente usado para mostrar conteúdo específico para uma determinada região ou talvez até mesmo redirecionar o usuário para um subsite diferente.
  • Rastreamento de atividade através de cliques com um encurtador de links como o plugin PrettyLinks.
  • Newsletter plugin pode definir um cookie para os usuários se eles já se inscreveram, isso dá a capacidade de esconder a caixa de newsletter completamente.

Essencialmente, qualquer ação ou opt-in em um site do WordPress, normalmente envolve a configuração de um cookie no navegador nos bastidores. O objetivo é, naturalmente, tentar ajudar a melhorar a experiência do navegador ou fornecer funcionalidades adicionais através da verificação.

Cookies WooCommerce

Ecommerce plugins como o WooCommerce normalmente têm seus próprios cookies adicionais que eles definem para que os compradores podem facilmente adicionar coisas ao seu carrinho, loja para mais tarde quando eles checkout, e entrar e sair de sua conta.

Para controlar os dados do carrinho, o WooCommerce define os seguintes três cookies (nenhuma informação pessoal é armazenada nos cookies):

  • woocommerce_cart_hash
  • woocommerce_items_in_cart
  • wp_woocommerce_session_

Os dois primeiros cookies contêm informações sobre o carrinho e simplesmente ajudam o WooCommerce a saber quando os dados do carrinho mudam. O terceiro cookie wp_woocommerce_session_ contém um código único para cada cliente que corresponde a uma entrada na tabela personalizada wp_woocommerce_sessions na base de dados.

tabela wp_woocommerce_sessions
tabela wp_woocommerce_sessions

Os dados do wp_commerce_session_ foram armazenados anteriormente na tabela wp_options, mas foram movidos para sua própria tabela personalizada no WooCommerce 2.5 quando eles introduziram um novo manipulador de sessão. Isso foi para melhorar o desempenho, a escalabilidade e o gerenciamento das sessões. Caso contrário, você rapidamente acaba com uma tabela wp_options inchada que você tem que limpar.

Easy Digitial Downloads Cookies

Easy Digital Downloads por padrão usa WP_Session, que é uma combinação de cookies do navegador e linhas de banco de dados armazenados na tabela wp_options. Abaixo está o biscoito que ele coloca:

  • edd_items_in_cart

Cookies e Caching WordPress

Quando se trata de cache do WordPress, é aqui que as coisas ficam complicadas. Caching é essencialmente o processo de armazenar recursos de uma solicitação e reutilizar esses recursos para solicitações subseqüentes. Basicamente, reduz a quantidade de trabalho necessário para gerar uma exibição de página. Enquanto isso é ótimo para o desempenho, ele causa um problema quando se trata de cookies.

Porquê? Porque os cookies estão lá para executar uma determinada ação, como manter o carrinho de compras preenchido enquanto você navega em torno de um site WooCommerce. No entanto, se uma página é servida a partir do cache, nem o PHP nem o banco de dados fazem nada, o servidor simplesmente serve uma cópia estática da página.

Então, o que podes fazer?

1. Usar JavaScript

A primeira opção seria usar JavaScript e atualizar o conteúdo de uma página dinamicamente. Basicamente, você tem espaços reservados em HTML e usa JavaScript para puxar informações sobre uma API ou chamada ajax.

Um exemplo seria carregar uma lista de posts na barra lateral do WordPress usando JavaScript para pegar uma lista de posts sobre o wp-api e depois renderizá-los na barra lateral. Nesse cenário, é possível atualizar a lista de lançamentos sem limpar a página do cache, uma vez que os dados são gerados dinamicamente.

Isto não é ideal, mas é sempre melhor fazer cache se possível em termos de desempenho. Mas se você deve ter algum bit de conteúdo permanecer dinâmico enquanto a própria página pode permanecer estática (servido a partir do cache), que é uma maneira de fazê-lo – use JavaScript para derrubar o conteúdo para essa parte da página dinamicamente através de uma chamada API/ajax. No entanto, a menos que você possa contratar um desenvolvedor do WordPress para criar uma solução JavaScript personalizada ou uma extensão de um plugin, essa opção geralmente não é prática.

2. Usar chamadas Admin-Ajax

Admin-ajax.php não pode ser armazenado em cache, pelo que pode utilizar chamadas admin-ajax. Um bom exemplo disso é o plugin No Cache AJAX Widgets. Ele faz chamadas admin-ajax e, portanto, não precisa se preocupar com conflitos com soluções de cache de nível de servidor ou de terceiros.

No entanto, assim como com o JavaScript, ir por esta rota é tipicamente inviável para o usuário médio. Ele também pode levar a outros problemas de desempenho, como alto uso do admin-ajax e muitas requisições não armazenadas em cache.

3. Excluir páginas do cache (quando o cookie está presente)

A menos que você possa ir pela rota JavaScript ou admin-ajax, excluir páginas do cache quando um cookie específico está presente é a melhor maneira de ir. Isto é tipicamente o que recomendamos, especialmente aqueles que executam sites altamente dinâmicos, como WooCommerce e Easy Digital Downloads.

Na Kinsta, certas páginas do WooCommerce e Easy Digital Downloads como carrinho, minha conta e checkout, são automaticamente excluídas do cache. Existe uma regra de nível de servidor em vigor para que os usuários ignorem automaticamente o cache quando o cookie woocommerce_items_in_cart ou cookie edd_items_in_cart é detectado para garantir um processo de checkout suave e in-sync.

Também ouvimos os cookies de login associados e configuramos o cache para ignorar quando detectamos que alguém entrou no WordPress. Evita que o painel de bordo traseiro seja acidentalmente encalhado.

Por padrão, não excluímos o cookie wp_woocommerce_session_ do caching. A maioria dos sites WooCommerce em nossa experiência não tem nenhum problema. Isso também melhora o desempenho ao aumentar a taxa de HIT do cache, enquanto utiliza menos PHP Workers.

No entanto, devido à existência de muitas configurações diferentes de temas e plugins do WordPress, podemos excluir o cookie wp_woocommerce_session_ do cache, se necessário. Basta contactar a nossa equipa de apoio. O resultado é que uma vez que um usuário adiciona um produto ao seu carrinho de compras, todos os pedidos subsequentes não serão atendidos a partir do cache, aumentando o uso de trabalhadores PHP.

Se você precisar de uma página personalizada excluída do cache, sinta-se à vontade para abrir um ticket com nossa equipe de suporte. Mais uma vez, é preciso ter cuidado quando se trata de exclusões. Demasiadas páginas sem cache podem realmente deteriorar o desempenho. Confira nossos pontos fortes e fracos para hospedagem de sites de afiliação ao WordPress.

Como ver e limpar cookies

É fácil ver e limpar cookies em um site. Para ver quais cookies são definidos em um site específico, navegue até esse site e clique no pequeno ícone de cadeado na parte superior. Depois clique em “Cookies”.

Cookies em uso
Cookies em uso

Depois, vá até à pasta do site. No exemplo abaixo, você pode ver que temos alguns cookies do WooCommerce definidos, bem como o cookie wordpress_logged_in_[hash]. Você também pode ver o tempo de expiração e se é um cookie persistente ou um cookie de sessão (quando a sessão de navegação termina).

Cookies WordPress
Cookies WordPress

Para remover um cookie, basta clicar em um cookie individual e clicar no botão “Remover”. Você também pode fazer isso no nível da pasta ou no Chrome DevTools.

A limpeza de cookies também pode ajudar você a corrigir o erro 304.

Alternativamente, você pode pesquisar ou limpar todos os cookies no seu navegador.

RGPD e Cookies

A GDPR é uma nova lei de privacidade que entrou em vigor em 25 de maio de 2018. Foi concebido para devolver aos cidadãos o controlo dos seus dados pessoais. Recomendamos vivamente a leitura do nosso post em profundidade: a baixa no cumprimento do RGPD, se ainda não o fez. Este é um tópico que não pode ser resumido em um parágrafo!

Aqui está um exemplo de uma mudança que fizemos em Kinsta para ajudar a cumprir a nova lei. Quando você visita nosso site pela primeira vez, talvez já o tenha visto, você é recebido com um prompt “Aceitar cookies” na parte inferior da tela. Isto porque agora somos legalmente obrigados a fornecer aos utilizadores uma forma de opt-in e opt-out dos cookies que estão a ser configurados. Longe vão os dias em que bastava correr o que se quisesse sem informar os utilizadores sobre a recolha de dados.

Aceitar cookies

Se você clicar em “Aceitar Cookies”, todos os cookies serão configurados para o usuário. Se você clicar em “Configurações de Cookies”, nós agora oferecemos uma maneira de optar por entrar e sair dos cookies que você quiser.

Configurações do cookie
Configurações do cookie

Muito elegante, não é? Nossa solução de cookies foi construída internamente por nossos desenvolvedores, mas aqui estão alguns plugins úteis do WordPress GDPR que podem ajudá-lo a realizar algo semelhante. Mais uma vez, os cookies são apenas uma pequena parte de se tornar completamente compatível com o GDPR.

Sessões PHP

As sessões PHP são uma alternativa à abordagem padrão de cookies. Ele ainda é um cookie, mas é chamado de PHPSESSID e é tipicamente armazenado no diretório /tmp/ no próprio servidor web. A forma como o servidor sabe associar uma determinada sessão a uma determinada solicitação é que ela também é armazenada em um cookie HTTP.

Cookie PHPSESSID HTTP
Cookie PHPSESSID HTTP

Isso também pode ser visto sob o cabeçalho HTTP de um site.

Cookie do conjunto de cabeçalhos HTTP PHPSESSID
Cookie do conjunto de cabeçalhos HTTP PHPSESSID

Uma sessão PHP é muito parecida com uma sessão normal que termina quando o usuário fecha seu navegador.

O problema com as sessões PHP se resume a problemas de performance e cache. A informação armazenada no cookie do navegador tem de ser recuperada com cada pedido para que o servidor saiba quem é o utilizador. Isto significa que para sites que usam PHPSESSID, a máquina teria que definir o PHPSESSID para contornar o cache. No entanto, o resultado é que PHPSESSID teria que ser configurado para contornar 100% do tempo, porque ao contrário do wordpress_logged_in, o PHPSESSID é definido em cada requisição PHP.

Então imagine que o wordpress_logged_in tinha que ser configurado 100% do tempo para permitir que a funcionalidade de login funcionasse. O que significa que mesmo os usuários desconectados teriam que ter o cookie e ele teria que ser exclusivo para eles. Imagine que isso era necessário para que o sistema de login do WordPress funcionasse. Nesse cenário, cada exibição de página teria que contornar o cache para que o cookie wordpress_logged_in fosse configurado corretamente tanto para usuários logados quanto para usuários logados.

Esse é o problema de usar PHPSESSID. Porque ele é gerado em cada pedido PHP, se um site depende de cookies PHPSESSID o host teria que definir PHPSESSID para contornar o cache 100% do tempo. Caso contrário, o PHPSESSID termina em cache e desarruma-se qualquer funcionalidade que se baseie nele.

Não recomendamos o uso de sessões PHP e elas normalmente não funcionam em nosso ambiente Kinsta. As sessões PHP também têm outras implicações de segurança que devem ser consideradas.

Se você vê código usando session_start em seu site, isso significa que está usando sessões PHP.

Muitos desenvolvedores de plugins e temas se moveram para o uso de uma combinação de cookies do navegador e linhas de banco de dados (seja na tabela wp_options ou em sua própria tabela personalizada). Se você precisar de dados de sessão, esta é a melhor abordagem.

Sinta-se livre para entrar em contato com nossa equipe de suporte se você tiver perguntas adicionais sobre sessões PHP.

Resumo

Esperamos que agora você saiba um pouco mais sobre como funcionam os cookies WordPress e as sessões PHP do que antes. Cookies são atualmente o que faz o mundo girar e são importantes para praticamente tudo o que acontece em um site WordPress. Desde manter-nos logados, até garantir uma experiência tranquila com o carrinho de compras e até mesmo garantir que uma janela popup permaneça fechada.

Tem mais alguma pergunta sobre cookies? 🍪 Deixe-nos saber abaixo nos comentários.

Brian Jackson

Brian tem uma enorme paixão pelo WordPress, e tem utilizado há mais de uma década e até desenvolve alguns plugins premium. Brian gosta de blogs, filmes e caminhadas. Conecte-se com Brian no Twitter.