Usando a session por uma classe auxiliar.

07/02/2013

Bom dia galera, vou explicar o meu caso detalhado.

Eu tenho uma pagina Login.ASPX, se o usuário logar e for autenticado, ele seta a Session["Autenticado"] = "1" e redireciona para a pagina Painel.aspx

O painel.aspx , em seu code behind possui a classe painel que antes herdava o System.Web.UI.Page.

o que eu fiz?

criei uma classe chamada Permissao, que está herdando System.Web.UI.Page.
Assim, agora ao inves de herdar o System.Web.UI.Page direto, eu herdo a classe Permissao no Painel.

Na classe permissão eu criei uma propriedade e um construtor:

public bool UsuarioAutenticado
{
get
{
if ((String)Session["UsuarioAutenticado"] == "1")
return true;
else
return false;
}
}

public Permissao()
{
if (this.UsuarioAutenticado == false)
{
Server.Transfer("Login.aspx");
}
}



......................
Ou seja, (pela minha lógica), quando a pagina Login redirecionasse para a pagina Painel, cairia no construtor da Permissão e validaria o usuário.

Porém, está dando um erro bizarro:
"+ UsuarioAutenticado 'UsuarioAutenticado' threw an exception of type 'System.Web.HttpException' bool {System.Web.HttpException}",

que dispara:

Session state can only be used when enableSessionState is set to true, either in a configuration file or in the Page directive. Please also make sure that System.Web.SessionStateModule or a custom session state module is included in the <configuration>\<system.web>\<httpModules> section in the application configuration.


...
só que eu ja setei o EnableSessionState="True" no painel! e até <pages enableSessionState="true"></pages> no web config!


Alguém tem uma luz?





Twitter/@caiouechi

Respostas

07/02/2013

Twitter/@caiouechi

uma moça falou:

"Esse código está numa classe herdada pela página certo?

Acontece que a Session só pode ser acessada no contexto da página. Talvez funcione se você usar:

HttpContext.Current.Session["propriedade"]"

..

ja tentei usar o httpcontext.current.session, porém ele fica como nulo =(
Responder Citar

07/02/2013

Robson Robsonalves.net

Tenta definir a session direto da página:

<%@ Page enableSessionState = "true" %>
Responder Citar

07/02/2013

Twitter/@caiouechi

um camarada senior aqui da empresa resolveu.

a questão é a seguinte, eu estava tentando acessar o valor da propriedade no construtor.

dai o sistema acessava a propriedade e disparava a verificação na session.

SÓ QUE, A SESSION AINDA NÃO FOI CRIADA NESSE CICLO DA PAGINA.

OU SEJA,

criei:

protected override void OnLoad(EventArgs e)
{
base.OnLoad(e);

if (!this.UsuarioAutenticado)
Server.Transfer("LogarNoSistema.aspx");
}





...

Robson, no topico anterior vc disse pra fazer o override no Onload, eu falei que tinha feito soh que tinha cagado todo page load...

descobri que faltava o base.OnLoad(e);


Valeu!!
Responder Citar

07/02/2013

Robson Robsonalves.net

Muito bom!

Keep Coding
Responder Citar

07/02/2013

Twitter/@caiouechi

valeu robson! e parabens por agora ser colaborador! Rs!! \O

Keep making questions on devmedia, rS!
Responder Citar

08/02/2013

Robson Robsonalves.net

Caio! Vlw cara!!

Entendendo que o assunto está resolvido!
Tranco o Tópico!

Abraços!
Responder Citar

08/02/2013

Twitter/@caiouechi

teste
Responder Citar

08/02/2013

Twitter/@caiouechi

Robson, quando vc tranca o topico, eu não deveria deixar de ter a possibilidade de postar? Rs

fiz só um teste.
Responder Citar

08/02/2013

Twitter/@caiouechi

Robson, quando vc tranca o topico, eu não deveria deixar de ter a possibilidade de postar? Rs

fiz só um teste.
Responder Citar

08/02/2013

Robson Robsonalves.net

Eu tmb achava que era viu, rsrs, vou reportar isso para a cupula!

Vlww!
Responder Citar