Por que você nunca usar objeto de armazenamento ViewState de asp.net sobre o objeto de armazenamento de sessão?

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

Pergunta

À excepção porque o armazenamento de sessão é sessão global para mais de uma página, por que você nunca quer usar o estado de visualização de valores de retenção?

Parece meio ridículo para enviar qualquer tipo de informação que não seja uma string de consulta pequeno poucos como valores, e para trás a partir do cliente para o servidor. Quero dizer que é um desperdício de largura de banda (!), Simplesmente para fins de armazenamento. A sessão, enquanto global em várias páginas, parece ser uma alternativa completamente superior ao viewstate.

Especialmente com asp.net ajax controles e variantes, o viewstate poderia rapidamente tornar-se inchado acompanhar os vários estados e variáveis ??de todos os controles diferentes e elementos HTML.

Mas então porque é que há armazenamento viewstate para as variáveis ??de páginas e objetos em tudo?

Talvez eu estou faltando um outro grande uso para armazenamento viewstate da página, alguém sabe alguma coisa lá fora?

Obrigado por ler!

EDIT:. Todos tinham uma grande resposta, desculpe se eu não pegar o seu

Foi útil?

Solução

Sessões correr para fora, Viewstate não - você pode voltar uma hora mais tarde e seu viewstate ainda estará disponível. Viewstate é também disponíveis de forma consistente quando você voltar / avançar no site, Sessão muda.

Outras dicas

Toda a razão para Viewstate ou Session é transformar a web a partir de um sistema de apátridas em uma dinâmica, experiência personalizada. Quando um usuário solicita uma página, a única maneira que você pode retomar de onde o usuário parou em sua experiência é para lembrar o estado quer no servidor ou no cliente do usuário.

Viewstate é um mecanismo para lembrar o estado do usuário no cliente. Session é um mecanismo para lembrar o estado do usuário no servidor.

Viewstate é um mecanismo de armazenamento transitória. Controles que usam VIEWSTATE têm o seu estado processado na página html como uma entrada escondida. Para evitar adulteração, ele é assinado. Ele não é criptografada, no entanto, então você provavelmente quer evitar colocar qualquer coisa sensível lá. Viewstate é útil para situações em que você deseja publicar em toda série de pedidos múltiplos (página cargas). Um exemplo disso é quando um formulário não validarem porque talvez o usuário digitou um endereço de e-mail ruim ou algo, e você deseja restaurar a forma como era antes o usuário submetido. As desvantagens para isso é que viewstate é uma besta com fome e pode facilmente adicionar 30-50% para o tamanho da página.

Session, por outro lado, é armazenado no servidor. O cliente recebe um token que informa ao servidor que bloco de memória é deles. Isso pode ser muito mais seguro do que o viewstate porque os dados não está sendo retransmitido para o usuário mais e mais. Há trade-offs embora. Seu servidor pode ficar sem memória. Ou, o usuário pode perder os dados se sua sessão é interrompida.

Geralmente, não há nenhuma resposta "certa" na qual usar. É tudo sobre o que você está tentando realizar.

A maioria das coisas a ver com controles deve usar Viewstate. Se você está lidando com informações confidenciais no entanto, considerar Session. Se você tiver dados que é para um conjunto específico de páginas, use viewstate. Se for dados que você vai precisar durante todo a visita de um usuário em seu site, considier sessão.

Por exemplo, quando o aplicativo pode ser executado em uma fazenda de computador e você pode sessão não configure para usar o servidor SQL. (Ou usando o sql server é demasiado de um acerto de desempenho)

ViewState e Sessão têm diferentes escopos. ViewState é projetado para armazenar dados mais ou menos transitória, durante a "postagens", enquanto a sessão é utilizada para guardar dados críticos do estado da sessão. Eu recomendo usar o ViewState para o estado relacionado com uma "sessão página" específico.

Se você não gosta do comportamento normal de ViewState, é muito simples para escrever seu próprio PageStatePersister e deixe este objeto realizar persistência, por exemplo, usando sessão, ou algo como Memcached. Você pode então substituir completamente o mecanismo de persistência padrão.

Então, a coisa boa é que você pode perfeitamente continuar a usar controles de web padrão no .NET Framework, que vai todo o uso ViewState / ControlState para este tipo de dados, sem inchaço do ViewState. Um mecanismo de persistência da memória do servidor pode ser muito eficiente.

Não é realmente uma resposta directa à sua pergunta, mas pode resolver o problema.

Você pode armazenar lado do servidor viewstate, eliminando a carga útil para o cliente.

Crie uma classe página herda, e substituir o PageStatePersister. http://msdn.microsoft.com/en- us / library / system.web.ui.sessionpagestatepersister.aspx

 public class RussPage : Page
    {
         protected override PageStatePersister PageStatePersister
        {
            get
            {
                return new SessionPageStatePersister(Page);
            }
        }
    }

ViewState é essencialmente apenas uma entrada escondida que deve ser enviado para o servidor e analisado com cada solicitação. Este campo é normalmente preenchido automaticamente, muitas vezes com o programador alegremente inconscientes, e pode crescer bastante grande. Para muitos sites que apresenta um problema, porque até mesmo os usuários de banda larga têm muito limitada largura de banda upstream.

Em sites de intranet onde todos os usuários têm acesso LAN de alta velocidade para o servidor, mas a RAM disponível para armazenar dados sessão é limitada, pode fazer mais sentido.

Não é uma resposta à sua pergunta, mas um de seus pressupostos é incorreta.

IDs de sessão podem ser passados ??na URL. faz sessão não exigem cookies.

http://msdn.microsoft.com/en-us/library /aa479314.aspx

<sessionState cookieless="true" />

Você está fazendo um aplicativo onde inchaço viewstate, em sua maior parte, não é um problema, então é melhor para dados específicos da página da loja no viewstate porque ajuda o servidor executar melhor. Se você ficar louco com a sessão, ou qualquer cache, para que o assunto, você pode se machucar mais, então você ajudar a si mesmo.

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