ASP .NET Verificar Session
-
13-09-2019 - |
Pergunta
Eu gostaria de verificar a existência da sessão em uma classe de página de base antes de usá-lo, mas eu descobri que, se ela não existir, ele vai lançar uma exceção apenas, verificando:
if (Session != null)
{
Session.Remove("foo");
}
Será lançar essa exceção:
O estado de sessão só pode ser usado quando enableSessionState é definido como verdadeiro, em um arquivo de configuração ou na diretiva Page. Certifique-se também que System.Web.SessionStateModule ou um módulo de estado de sessão personalizado está incluído na \\ seção na configuração do aplicativo.
A verificação acontece no evento Load de uma classe de página de base que todas as minhas páginas aspx derivam. O aplicativo tem a sessão habilitado, e tem o módulo listado na httpModules nó. Este é um aplicativo que sessão utiliza com frequência, normalmente sem nenhum problema.
Eu recebo este erro apenas em determinadas páginas e na maioria das vezes não é confiável. Eu sei que eu deveria estar fazendo algo diferente para evitar o erro, mas eu não tenho certeza do que?
Am I chamando a Sessão muito cedo no ciclo de vida, talvez? Que não estou verificando corretamente para se a sessão está disponível?
Solução
Você pode fazer o seu check mais seguro - Page.Session envolve um cheque nulo em torno da propriedade Context.Session. Portanto, você deve ser capaz de recuperar Context.Session e verificar se é nulo. Se for, então o estado da sessão não está disponível.
Mas deve estar disponível em Page_Load (), para que os pontos a problemas em outros lugares:)
Outras dicas
Você pode usar um método como este para determinar se o pedido atual usa sessão:
public static bool RequestHasSession
{
get
{
return (HttpContext.Current.Handler is IRequiresSessionState);
}
}
Se você não tem certeza de que você está mesmo correndo em um contexto web você precisa verificar se HttpContext.Current não foi nula antemão.
Você não está experimentando a exceção por causa de um certo ser variável de sessão nula, mas simplesmente usando a lógica da sessão em uma página que não está configurado para comunicar com o servidor de estado de sessão (o que faz sentido em alguns casos em que é realmente uma máquina diferente). Se não é um problema para você, considere certificando-se de que você sempre tem enableSessionState conjunto para true.
Tente verificar para HttpContext.Current.Session
, ou mesmo HttpContext.Current
(eu que muito em Unidade de Teste, quando os componentes são chamados a partir do ASP.NET Eu tenho os vars, mas quando eu chamá-los de NUnit Eu não tê-los disponíveis)
Será que você verifique as páginas que estão jogando o erro para a propriedade enableSessionState
da directiva página? Você pode fazer isso indo até a página .aspx, e verificar se a propriedade enableSessionState
é definido como verdadeiro / falso. Se seu conjunto de false
, torná-lo true
.
Além disso, verifique no arquivo web.config para o <pages />
tag, e atualizá-lo para incluir -
<pages enableSessionState="true" />
Referência: Aqui