Trabalhando com sessões com Asp.NET Core 2.0

0

Recentemente enfrentei um problema, que foi trafegar dados entre páginas com asp.net core. Acabei utilizando sessões que foi bastante fácil de configurar e utilizar com .net.

Primeiramente , altere o método ConfigureServices() classe de Startup , adicione serviços para a sessão e seu armazenamento de backup:

public void ConfigureServices(
            IServiceCollection services)
        {
            services.AddDistributedMemoryCache();
            services.AddSession();
        }

public void Configure(
            IApplicationBuilder app,
            IHostingEnvironment env)
        {
            app.UseSession();
 
            app.Use(async (context, next) =>
            {
                context.Session.SetString("GreetingMessage", "Hello Session State");
                await next();
            });
 
            app.Run(async (context) =>
            {
                var message = context.Session.GetString("GreetingMessage");
                await context.Response.WriteAsync($"{message}");
            });
}

 

Você pode utilizar o método GetString ou SetString em qualquer parte do seu código, com isto você poderá armazenar informações e obtê-las posteriormente.

Durante a configuração dos serviços de sessão, podemos definir várias propriedades:

  • HttpOnly : define se o cookie é acessível por meio do JavaScript. O padrão é true, o que significa que não pode ser acessado via scripts no lado do cliente.
  • Name : usado para substituir o nome do cookie padrão.
  • SecurePolicy : determina se o cookie de sessão é transmitido somente por meio de solicitações HTTPS.
  • IdleTimeout : define o tempo de expiração da sessão, cada solicitação redefine o tempo limite. O padrão é 20 minutos.

Veja o exemplo:

  public void ConfigureServices(
           IServiceCollection services)
        {
            services.AddDistributedMemoryCache();
            services.AddSession(options =>
            {
                options.Cookie.HttpOnly = true;
                options.Cookie.Name = ".Fiver.Session";
                options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
                options.IdleTimeout = TimeSpan.FromMinutes(10);
            });
  }

 

Você também pode armazenar objetos, basta apenas fazer uma adição de um método na classe HttpContext.Session (ou ISession que implementa o método) e assim podemos serializar objetos em strings JSON para conseguir isso:

  public static class SessionExtensions
    {
        public static void SetObject<T>(this ISession session, string key, T value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }
 
        public static T GetObject<T>(this ISession session, string key)
        {
            var value = session.GetString(key);
            return value == null ? default(T) :
                                  JsonConvert.DeserializeObject<T>(value);
        }
    }

 

Você pode obter o código fonte do projeto aqui assim como suas referências: https://github.com/jhomarolo/Fiver.Asp.SessionState

Um abraço!

Compartilhe.

Sobre o autor

Criador do blog Código Simples e com mais 9 anos de experiência em TI, com títulos de MVP Microsoft na área de Visual Studio Development, Neo4j Top 50 Certificate, Scrum Master e MongoDB Evangelist. Atuando em funções analista, desenvolvedor, arquiteto, líder técnico e gestor de equipes. Mais informações em : http://jhonathansoares.com