Olá pessoal, gostaria de falar e mostrar uma nova maneira de trabalhar com Session dentro de um site feito com a plataforma ASP.NET. Muitos sites e sistemas utilizam de forma descentralizada esse tipo de informação. 

O meu objetivo aqui é mostrar que existe uma maneira legal e centralizada para gerar e pegar sessão de um sistema.

Utilizado: ASP.NET, C#.NET, Visual Studio .NET 2010, Session

O primeiro passo é gerar a classe do tipo static e public. Cliquei com o botão direito em cima da pasta Code, selecionei Add e New Item. (Imagem 1)


Imagem 1
Apareceu a tela com todas as opções. Escolhi o tipo Class.cs no template do programa Visual Studio 2010. Digitei o nome de SessaoSistema.cs, em seguida cliquei no botão Add. (Imagem 2)


Imagem 2

Com a classe criada, é bom colocar o public e o static para não haver esquecimento. Isso facilita porque não precisa fazer instância para usar. Todas as sessões do sistema ficarão dentro dessa classe.  (Code 1)

public static class SessaoSistema

{

}

Code 1
O passo seguinte é gerar get e set dos nomes de sessão.  Alguns não precisam de set, só de get. (Code 2)

 

        public static string IPUsuario

        {

            get

            {

                string ip = "";

 

                if (HttpContext.Current.Request.ServerVariables["HTTP_X_CLIENTIP"] != null)

                    ip = HttpContext.Current.Request.ServerVariables["HTTP_X_CLIENTIP"].ToString();

                else

                    ip = Convert.ToString(HttpContext.Current.Request.ServerVariables["REMOTE_ADDR"]);

 

                return ip;

            }

        }

 

Code 2

No Code 2, criei uma propriedade chamada  IPUsuario apenas com Get, isso porque o aplicativo pega o IP do usuário de forma automática. A próxima propriedade é o nome do usuário que loga na aplicação. (Code 3)

 

        public static string nomeUsuario

        {

            get

            {

                try

                {

                    return Convert.ToString(HttpContext.Current.Session["Session:NomeUsuario"]);

                }

                catch

                {

                    return "";

                }

            }

            set

            {

                HttpContext.Current.Session["Session:NomeUsuario"] = value;

            }

        }

 

Code 3

Essa propriedade Code 3 mostra que dentro do Get existe o try catch porque a sessão pode não existir, no catch o retorno do valor é string vazia. Na parte do Set a sessão recebe o valor atribuído no momento que o usuário entra com usuário e senha, por exemplo:  (Code 4).

private void logar()

{

        //está logado

        SessaoSistema.nomeUsuario = dadoRetorno_NomeUsuario;

}

Code 4

Quando o tipo da variável é número longo, como o ID do usuário logado. Criei uma propriedade do tipo long com get e set. (Code 5)


 

        public static long usuarioID

        {

            get

            {

                try

                {

                    return Convert.ToInt64(HttpContext.Current.Session["Session:usuarioID"]);

                }

                catch

                {

                    return 0;

                }

            }

            set

            {

                HttpContext.Current.Session["Session:usuarioID"] = value;

            }

        }

 

 

Code 5
Note que existe o try e catch dentro do get, no caso de erro retorna o valor zero. No caso da sessão estar zerada, o aplicativo pode enviar o usuário para a tela de login. Sendo do tipo Boolean, você pode colocar o try, catch e no caso de erro, retornar false. 

Sobre o nome colocado dentro do colchete como este [“Session:usuarioID”], depende apenas de você. Você pode colocar qualquer nome que preferir, ou que tenha como padrão na sua empresa e sistemas. Algumas pessoas colocam apenas o nome em vez de colocar o session antes, por exemplo: [“nomeUsuario”]. Não há problema algum neste caso. 

Lembro que na tela de login do sistema, devem ser adicionados os valores retornados de um banco de dados ou de qualquer outra fonte de dados. Fico por aqui e qualquer problema ou dúvida pode entrar em contato.