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
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
return Convert.ToInt64(HttpContext.Current.Session["Session:usuarioID"]);
return 0;
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 espero que tenha gostado. This article was originally written by: Maurício Júnior MCP, MCAD, MVP Microsoft www.mauriciojunior.org blog.mauriciojunior.org
Maurício Júnior - MCP, MCAD, MVP Microsoft edited Revision 1. Comment: Colocando autor
Fernando Lugão Veltem edited Original. Comment: alterado tags