TransWikia.com

Indicações de uso de cookies?

Stack Overflow em Português Asked on March 2, 2021

Qual seria a indicação para se usar cookies?

Eles seriam um IsolateStorage do desenvolvimento web, mas até hoje não consegui achar uma aplicação para os mesmos, em um projeto de mídia social que estou trabalhando usei eles apenas uma vez para lembrar login do usuário.

Não tenho muita confiança nesse método de armazenamento, pois expiram, são apagados, etc. Em opinião pessoal prefiro usar banco de dados para gravar tudo que for possível.

Quais exemplos clássicos de aplicações de cookies que poderiam me dar? Onde eles realmente fazem a diferença, e como usa-los em conjunto com banco de dados (talvez para nao ter que ficar sempre acessando o banco)

3 Answers

Qual seria a indicação para se usar cookies?

Qualquer informação que você deseja que seja enviada de volta para o servidor na próxima requisição, independente do tipo de requisição.

Veja, quando pensamos no que isso resolve, devemos tomar cuidado para não simplesmente olhar o que as pessoas fazem.

Vejamos alguns casos de uso:

  • Login: faz sentido porque você quer autenticar o usuário em cada requisição.
  • Tokens de segurança: algumas implementações podem usar cookies para gerenciar tokens de proteção à ataques XSRF. Esses tokens são gerados pelo servidor ao abrir um formulário e verificados quando o formulário é submetido.
  • Preferências do usuário:
    • Persistentes: melhor gravar num banco de dados e trazer na página de alguma forma, talvez como atributos.
    • Transientes: configurações descartáveis podem usar local storage ou session storage, a não ser que você queira suportar navegadores antigos.
  • Armazenamento intermediário: algumas aplicações AJAX podem usar algum mecanismo para salvar dados que ainda não estão prontos para ir ao servidor. Por exemplo, o Stack Overflow salva o rascunho da sua resposta. Entretanto, devido às várias limitações, geralmente não é uma boa idéia usar cookies e sim algum storage já mencionado.
  • Armazenamento temporário (cache): algumas aplicações podem usar cookies para otimizar o sistema, evitando assim consultar dados no servidor a todo momento. Entretanto, a experiência (minha e de várias pessoas) é que o ganho é mínimo se comparado com os problemas que isso pode gerar tanto para a usabilidade quanto para a manutenção. Uma boa implementação usando algum storage ainda pode ajudar, mas com vários efeitos colaterais como todo cache, tal como determinar o momento certo de expiração.

Cookies não são dados locais

Algo importante, é que cookies geram overhead em cada requisição para o servidor.

Isso significa que aquela ideia maravilhosa de salvar alguns dados localmente em cookies e assim evitar carregar do servidor, na verdade é um tiro pela culatra, pois os dados são enviados para o servidor novamente em cada requisição.

Se você tiver 1KB de informação em cookies, cada vez que o usuário clicar num link, esse 1KB será transmitido no cabeçalho da requisição e processado pelo servidor.

Considerações

Note que eu nem entrei na questão de como gerenciar os valores, sincronizá-los com o servidor, como lidar com dados quando eles somem e por aí vai.

Essas são consequências do modelo proposto. O ponto importante é entender que o escopo dos cookies é diferente de outras soluções mais específicas.

Correct answer by utluiz on March 2, 2021

Cookies geralmente são usados para salvar preferências (folha de estilo, dados sobre o uso, quantidade de acessos, frequência, etc).

No começo do Orkut apenas com o cookie do usuário você poderia acessar a conta sem nem mesmo ter a senha isso é uma falha de segurança, o cookie NUNCA deve ser usado como único meio de identificar o usuário.

Sobre gravar TUDO no banco de dados creio que seja desnecessário, uma forma legal de armazenar dados temporários ou permanentes (até que o usuário limpe o armazenamento local) introduzida no HTML5 é a localStorage um cookie com esteroides.

Answered by Laerte on March 2, 2021

Se você não vê uso para ele talvez seja bom. É comum programador achar solução e depois ficar procurando um problema para aplicá-la. Isto não costuma dar certo.

  • Um dos maiores usos é justamente o citado, identificar o usuário. Várias técnicas podem ser usadas para fazer isto, eu diria até que é o único que vale a pena ser usado.

    Esta identificação pode ser um código único onde você vai associar a registros do que ele faz no seu banco de dados no servidor. É algo bem simples, é só um marcador.

    Esta técnica é usada para gerar estatísticas de acesso e rastrear o que o usuário está fazendo. Isto pode ser considerado uma invasão de privacidade, ainda que poucas pessoas se preocupam com isto (isso é grave agora com legislação sobre o assunto). Vários sites avisam que estão fazendo isto e se estão usando ferramentas de terceiros que usam está técnica. Isto pode evitar processos em países mais litigiosos.

  • O cookie pode ser usado para controle de sessão. E é uma especialização da identificação do usuário que, em tese, expirará logo. O cookie é ótimo para criar uma impressão de estado durante a navegação.

    Normalmente a web é usada para acessar páginas de forma isolada. Para organizar cada acesso do mesmo navegador como se fosse uma continuação de algo já feito, você cria sessão mantendo o estado no servidor. Para saber se a nova comunicação entre o navegador e o servidor vem da mesma fonte e deve ser considerada como sendo da mesma sessão tem que identificar o usuário. O cookie foi feito para isto. Algumas pessoas consideram esta a única possibilidade de uso de cookie atualmente, por uma boa razão.

    Isto pode ser usado para dar mais segurança provendo tokens de acesso para garantir que a sessão não seja usada de forma indevida.

  • Outra forma que usam é guardar algumas configurações de como o usuário prefere acessar o site. É claro que não pode ser nada muito sofisticado e importante. Considere ele como algo temporário. Com o advento de outras técnicas isto foi sendo deixado de lado, até pela ineficiência intrínseca. Considere uma técnica legada.

    É possível armazenar isto no banco de dados do navegador, o tal do Local Storage. Ele é preferível para dados maiores para evitar o transporte de dados desnecessários entre a comunicação entre navegador e servidor HTTP.

  • Outros usos como cache até são usados, mas não é recomendado.

Banco de dados local

O banco de dados local tem lá suas vantagens, mas não resolve tudo e não pode ser usado sempre. Assim como os cookies, ele só pode ser usado se o usuário aceitar e ele pode manipular ou apagar a hora que ele bem entender. Não tem como escapar disto. É claro que o banco de dados do navegador cabe mais dados, permite mais controle, mas fora isso e que os dados não são usados na comunicação direta, enxergue ele como um super-cookie, não mais que isto.

Dados permanentes

Quer armazenar informações do usuário de forma permanente? Faça no servidor.

Quer sempre identificar quem é o usuário daquele navegador para pegar as informações dele no servidor? Não tem garantias.

O cookie serve para isto, se ele estiver lá do jeito que você colocou. Tem que ter outras formas de identificar o usuário (login espontâneo, por exemplo).

Você quer que uma pessoa que não te conhece dê acesso ao computador dela e você ter total controle sobre isto? Não é viável.

Expiração

A expiração é controlada por você, até que o usuário queira interferir nisto. Há técnicas próprias para determinar quando ele expira. É comum usar algo que expira logo para manter a sessão ativa e obviamente tem como ir prorrogando a expiração. Há quem deseje manter a sessão ativa por um longo período.

Esta é uma forma de evitar que a pessoa seja obrigada fazer um novo login. Isto é prático mas não muito seguro. Até pode fazer isto mas sabendo do risco e tomando alguns cuidados para evitar captura facilmente. Qualquer coisa que exija um pouco mais de segurança além do trivial não deve usar esta técnica.

Conclusão

Pensa certo quando acha que não é um mecanismo confiável e robusto.

Ele não deve ser abusado, e não pode ser a única forma de conseguir o que quer. Mas não tem como fugir dele em algumas situações.

Planeje o uso para algo simples e efêmero.

Answered by Maniero on March 2, 2021

Add your own answers!

Ask a Question

Get help from others!

© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP