Quantos dados você pode/deve armazenar em um objeto de sessão de usuário?

StackOverflow https://stackoverflow.com/questions/73008

  •  09-06-2019
  •  | 
  •  

Pergunta

Temos vários aplicativos de formulário estilo assistente em nosso site, onde capturamos informações do usuário em cada página e depois as enviamos para um processo de back-end usando um serviço da web.

Infelizmente não podemos enviar as informações em partes durante cada envio de formulário, então temos que armazená-las na sessão do usuário até o final do processo e enviá-las todas ao mesmo tempo.

A quantidade de memória do servidor/espaço em disco do SQL Server é a única restrição de quanto posso armazenar nas sessões dos usuários ou há algo mais que preciso considerar?

Editar:O site é construído em formulários web ASP.NET.

Foi útil?

Solução

Supondo que as informações não sejam confidenciais, você poderá armazená-las em um cookie, o que reduziria a quantidade de informações necessárias para serem armazenadas no servidor.Isso também permitiria que você acessasse as informações via JavaScript.

Alternativamente, você pode usar o viewstate para armazenar as informações, embora isso possa levar ao envio de grandes quantidades de dados entre o servidor e o cliente, e não a minha solução preferida.

A quantidade de informações de sessão que você deve armazenar varia muito dependendo do aplicativo, do número de usuários esperados, da especificação do servidor, etc.Para dar uma resposta mais precisa, seriam necessárias mais informações :)

Por fim, supondo que as informações coletadas ao longo do processo não sejam necessárias de página para página, você poderia armazenar todas as informações em uma tabela de banco de dados e armazenar apenas o ID exclusivo dos registros na sessão.À medida que cada página é enviada, o registro do banco de dados é atualizado e, na página final, todas as informações são recuperadas e enviadas.Esta não é uma solução ideal se você precisar recuperar informações anteriores em cada página subsequente devido ao número de leituras de banco de dados necessárias.

Outras dicas

Você também poderia ter 1 página asp com todo o formulário html e ocultar partes dele até que o usuário preencha e "envie" a parte visível...

depois é só ocultar a parte que está preenchida e mostrar a próxima parte do formulário...

Isso seria extremamente fácil no framework .NET, usar painéis para cada "etapa do assistente" e adicionar lógica ao exibir e ocultar cada painel.

você terá então todos os dados em uma página.

Se você usar um modelo HTTP tradicional (ou seja,não use runat="server") você pode postar os dados em outra página asp e colocar os dados postados em elementos de formulário ocultos, você pode fazer isso para quantas páginas precisar, evitando assim colocar qualquer coisa em uma variável de sessão.

Como é problemático do ponto de vista do desempenho armazenar grandes quantidades de dados no objeto Session do usuário, o ASP.Net fornece algumas outras soluções alternativas além do que é mencionado nas postagens acima. Provedor de perfil ASP.NET permite que você persista informações relacionadas à sessão em um banco de dados.Você também pode usar Servidor de estado de sessão que usa um servidor separado para armazenar todas as informações da sessão.Ambas as situações levam em consideração se você precisar usar clusters ou balanceadores de carga, os servidores ainda poderão reconhecer as informações da sessão em diferentes servidores.Se você armazenar informações no objeto Sessão Http, você se deparará com o problema de que um usuário deve sempre ir para o mesmo servidor para aquela sessão.

Sessão, viewstate, banco de dados.Tudo isso é lento, mas fará o trabalho.

Campos ocultos do formulário são a resposta que mais gosto.

Existem outras maneiras de persistir o estado.Cookies, janela pop-up, frameset ou iframes.

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