// Copyright (c) .NET Foundation. All rights reserved. // Licensed under the Apache License, Version 2.0. See License.txt in the project root for license information. using System; using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Logging; namespace SessionSample { public class Startup { public Startup(IHostingEnvironment env) { var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appsettings.json"); if (env.IsDevelopment()) { builder.AddUserSecrets(); } Configuration = builder.Build(); } public IConfigurationRoot Configuration { get; set; } public void ConfigureServices(IServiceCollection services) { // Uncomment the following line to use the in-memory implementation of IDistributedCache services.AddDistributedMemoryCache(); // Uncomment the following line to use the Microsoft SQL Server implementation of IDistributedCache. // Note that this would require setting up the session state database. //services.AddDistributedSqlServerCache(o => //{ // o.ConnectionString = Configuration["AppSettings:ConnectionString"]; // o.SchemaName = "dbo"; // o.TableName = "Sessions"; //}); // Uncomment the following line to use the Redis implementation of IDistributedCache. // This will override any previously registered IDistributedCache service. //services.AddStackExchangeRedisCache(o => //{ // o.Configuration = "localhost"; // o.InstanceName = "SampleInstance"; //}); services.AddSession(o => { o.IdleTimeout = TimeSpan.FromSeconds(10); }); } public void Configure(IApplicationBuilder app) { app.UseSession(); app.Map("/session", subApp => { subApp.Run(async context => { int visits = 0; visits = context.Session.GetInt32("visits") ?? 0; context.Session.SetInt32("visits", ++visits); await context.Response.WriteAsync("Counting: You have visited our page this many times: " + visits); }); }); app.Run(async context => { int visits = 0; visits = context.Session.GetInt32("visits") ?? 0; await context.Response.WriteAsync(""); if (visits == 0) { await context.Response.WriteAsync("Your session has not been established.
"); await context.Response.WriteAsync(DateTime.Now + "
"); await context.Response.WriteAsync("Establish session.
"); } else { context.Session.SetInt32("visits", ++visits); await context.Response.WriteAsync("Your session was located, you've visited the site this many times: " + visits); } await context.Response.WriteAsync(""); }); } public static void Main(string[] args) { var host = new WebHostBuilder() .ConfigureLogging(factory => factory.AddConsole()) .UseKestrel() .UseIISIntegration() .UseStartup() .Build(); host.Run(); } } }