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?

Foi útil?

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

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