Pergunta

Existem várias maneiras de manter o estado do usuário usando em desenvolvimento web.

Estas são as únicas que eu posso pensar de agora:

  1. Cadeia de consulta

  2. cookies

  3. métodos de formulário (GET e POST)

  4. Viewstate (ASP.NET somente eu acho)

  5. Session (servidor Web InProc)

  6. Session (servidor web dedicado)

  7. Session (banco de dados)

  8. local Persistência (Google Gears) (agradecimentos Steve Moyer) etc.

Eu sei que cada método tem suas próprias vantagens e desvantagens como biscoitos não ser seguro e QueryString ter um limite de comprimento e ser feio para olhar! ;)

Mas, ao projetar um aplicativo web Estou sempre confuso quanto ao que os métodos a utilizar para o pedido ou o que os métodos para evitar.

O que eu gostaria de saber é o que o método (s) que você geralmente usam e gostaria de recomendar ou mais interessante que um desses métodos que gostaria de evitar em determinados cenários e por quê?

Foi útil?

Solução

Embora esta seja uma questão muito complicada de responder, eu tenho algumas-mordida rápida coisas que eu penso sobre quando considerando a implementação do estado.

  • Consulta Estado corda só é útil para a maioria das tarefas básicas - por exemplo, mantendo a posição de um usuário dentro de um assistente, talvez, ou fornecendo um caminho para redirecionar o usuário para depois completar uma determinada tarefa (por exemplo, o login ). Caso contrário, a consulta do estado string é terrivelmente inseguro, difícil de implementar, e, a fim de fazer justiça, ele precisa estar vinculado a alguma máquina de estado do lado do servidor que contém uma chave para amarrar o cliente para estado mantido do servidor para esse cliente.
  • estado Cookie é mais ou menos o mesmo - é apenas mais sofisticado do que estado string de consulta. Mas ainda é totalmente mantido no lado do cliente, a menos que os dados no cookie é uma chave para amarrar o cliente a alguma máquina de estado do lado do servidor.
  • estado método Form é novamente semelhante - é útil para campos esconderijos que amarram uma determinada forma a algum bit de dados no back-end (por exemplo, "este usuário está editando registro # 512, para que o formulário irá conter uma entrada escondida com o valor de 512" ). Não é útil para muito mais, e novamente, é apenas uma outra implementação da mesma idéia por trás string de consulta e estado cookie.
  • O estado da sessão (qualquer das maneiras que você descreve) são todos grandes, já que eles são infinitamente extensível e pode lidar com qualquer coisa que sua linguagem de programação escolhida pode manipular. A primeira ressalva é que é preciso haver uma chave na mão do cliente para amarrar esse cliente para seu estado a ser armazenado no servidor; este é onde a maioria dos frameworks web fornecer tanto uma volta chave de cookie ou baseado-string de consulta para o cliente. (Quase todos os modernos se usa cookies, mas cai para trás em seqüências de consulta se os cookies não estão habilitados.) A segunda ressalva é que você precisa colocar alguns embora em como você está armazenando seu estado ... você vai colocá-lo em um base de dados? Será que o seu framework web lidar com isso inteiramente para você? Novamente, mais modernos frameworks web levar o trabalho fora deste, e para mim a percorrer cerca de implementar minha própria máquina de estado, eu preciso de um muito boa razão ... caso contrário, eu sou susceptível de criar segurança buracos e funcionalidade quebra que foi hash ao longo do tempo em qualquer dos quadros maduros.

Então eu acho que eu realmente não posso imaginar não querer estado baseada em sessão de uso para qualquer coisa, mas a razão mais trivial.

Outras dicas

A segurança também é um problema; valores na cadeia de consulta ou os campos do formulário podem ser trivialmente alterado pelo usuário. A autenticação do usuário deve ser salvo seja em um cookie criptografado ou inviolável ou na sessão do lado do servidor. Manter o controle dos valores passados ??de uma forma como um usuário conclui um processo, como uma inscrição local, bem, isso pode provavelmente ser mantidos em campos de formulários ocultos.

O agradável (e às vezes perigoso) coisa, porém, sobre a string de consulta é que o estado pode ser pego por qualquer pessoa que clica em um link. Como mencionado acima, isso é perigoso se ele dá ao usuário uma autorização que não deveria ter. É bom, porém, para mostrar seu amigos algo que você encontrou no site.

Com o aumento do uso da Web 2.0, eu acho que existem dois métodos importantes que faltam da sua lista:

8 aplicações AJAX -. Desde que a página não recarregar e não há nenhuma página de navegação de página, o estado não é um problema (mas persistência de dados do usuário devem usar as chamadas XML assíncrono)

9 local persistência -. Aplicativos baseados em navegador pode persistir seus dados de usuário e estado para o disco rígido local usando bibliotecas como o Google Gears

Quanto qual é o melhor, eu acho que todos eles têm o seu lugar, mas o método de cadeia de consulta é problemático para os motores de busca.

Pessoalmente, já que quase todo o meu desenvolvimento web é em PHP, eu uso manipuladores de sessão no PHP.

Sessões são os mais flexíveis, na minha experiência:. Eles são normalmente mais rápido do que acessos db, e os biscoitos que geram morrem quando os fecha o navegador (por padrão)

Evite InProc se você planeja hospedar seu site em um host barato-n-alegre como webhost4life. Eu aprendi da maneira mais difícil que porque seus sistemas são mais subscrito, eles reciclam as aplicações muito com freqüência que faz com que a sessão de se perder. Muito irritante.

Sua sugestão é usar StateServer o que é bom, exceto que você tem que serialise / deserialise a sessão EASH posto de volta. Eu amo objetos e meu aplicativo web está cheia deles. Eu estou preocupado com o desempenho quando se muda para StateServer. Eu preciso refatorar apenas colocar as coisas que eu realmente preciso na sessão.

desejo que eu tinha sabem que antes de eu começar ...

Cheers, Rob.

Tenha cuidado para que estado você armazenar lado do cliente (seqüências de consulta, campos de formulário, cookies). Qualquer coisa relacionadas à segurança não deve ser armazenado do lado do cliente, exceto, talvez, um identificador de sessão, se for razoavelmente obscurecida e difícil de adivinhar. Há também muitos sites que têm configurações como campo de formulário "autenticado = true" e armazenar aqueles em uma seqüência de cookie ou consulta ou oculto. É trivial para um usuário de bypass algo parecido. Lembre-se que qualquer entrada proveniente de um cliente poderia ter sido adulterado e não deve ser confiável.

cookies assinados ligada a algum tipo de armazenamento de banco de dados quando você precisa pegar dados. Não há nenhuma razão para ser o armazenamento de dados no lado do cliente se você tem um back-end conectado; você está apenas à procura de problemas, se este é um site voltado para público.

Não é algum tanto uma questão do que usar e o que evitar, mas quando usar cada. Cada um tem uma determinada circunstância quando é o melhor, e uma circunstância diferente quando é o pior.

O fator decisivo é geralmente vida dos dados. o estado da sessão vive mais tempo do que os campos do formulário, e assim por diante.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top