outro dia, eu estava discutindo com um colega e ele saiu dizendo que usar a sessão do usuário em um aplicativo da web está errado. Eu respondi que isso poderia estar errado, dependendo das informações que você está armazenando, caso contrário, por que um serviço de sessão na Web deveria ser fornecido pela Microsoft (estávamos falando sobre o ASP.NET).
Ele me respondeu, novamente, que mesmo em MS eles poderiam facilmente me responder que era um design ruim. E que ele poderia me mostrar alguns documentos técnicos demonstrando isso.
Infelizmente, não tenho mais oportunidade de entrar em contato com esse cara, mas gostaria muito de entender mais sobre o ponto de vista dele. Alguém tem informações / pontos de vista sobre isso aqui?
web-applications
abx78
fonte
fonte
Respostas:
Não acho que ele quis dizer "mau design", mas "má prática". De um modo geral, um aplicativo Web deve ser o mais sem estado possível. Mesmo que, por exemplo, você precise conhecer as informações do usuário para autorizar a exibição da página, essas informações podem ser salvas na máquina cliente na forma de um cookie e o servidor simplesmente valida as informações do usuário todas as vezes.
Isso seria ideal, mas nem sempre você pode contar com o cliente para salvar cookies. Além disso, envolve a validação do usuário de um estado sem estado, o que potencialmente envolve consultar informações do banco de dados para uma simples solicitação de página. Muitas vezes, é mais simples salvar essas informações na sessão.
No entanto, depois de atravessar o Rubicon, muitos programadores são tentados a salvar não apenas informações de autenticação na sessão, mas também muitas outras coisas. Esse é um antipadrão e tende a tornar seu aplicativo Web fortemente dependente do estado, que é precisamente o que deveria ser evitado em primeiro lugar.
Alguns programadores se baseariam em tecnologias como a Spring (se você estiver usando Java) para desvendar o que seria uma bagunça de dependências, mas eu argumentaria que isso apenas facilita a criação de dependências, em vez de eliminá-las. Tais tecnologias devem ajudar seu desenvolvimento, não tornar seu antipadrão menos um problema.
Portanto, uma boa regra geral é que, se você pode escrevê-lo sem estado, provavelmente é uma idéia melhor fazê-lo ou corre o risco de cair nessa armadilha. Obviamente, você vai se deparar com situações nas quais isso é necessário, mas de um modo geral, você deve salvar apenas informações que, de outra forma, seriam difíceis de obter.
fonte
but you can't always count on the client being able to save cookies
então AFAIK, você também não pode contar com sessões. Os cookies não são usados para identificar qual sessão pertence a qual usuário ou existem outros métodos e isso é simplesmente o mais comum?Eu acho que você está confundindo dois tópicos diferentes: 1) sessões e 2) o modelo de página dos formulários da web asp.net
Uma sessão da web é necessária para autenticar um usuário. Idealmente, uma sessão deve ser usada apenas para esse fim. Você não deve armazenar dados do usuário em uma sessão (seja no servidor, em um cookie ou como o asp.net/webforms faz: dentro da própria página). Ninguém deve dizer que uma sessão da Web é ruim, mas armazenar dados do usuárioem uma sessão é uma má prática. Os motivos para não armazenar dados do usuário no servidor incluem os mesmos motivos para evitar variáveis globais. Armazenar dados do usuário em cookies ou na página pode apresentar problemas de segurança. O uso do modelo de página do asp.net também não adere à natureza apátrida da web. Você pode fazer uma pesquisa para descobrir mais sobre por que os webforms são um design ruim. As sessões, por outro lado, são uma parte necessária dos aplicativos da web.
fonte
Controles e armazenamento do estado da sessão em uma página são essencialmente um hack. É o caso do MS - necessário, pois eles queriam fornecer um ambiente de desenvolvimento em que você pudesse criar páginas como em ambientes winform.
Os próprios MS se mudaram para a arquitetura MVC (versão mais recente - MVC 4), que é mais um retorno ao que o protocolo realmente deveria ser - sem estado.
Há situações em que o estado de armazenamento ainda é útil, mas deve-se entender que essa é a exceção e não a regra.
fonte