108 lines
3.8 KiB
C#
108 lines
3.8 KiB
C#
// 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<Startup>();
|
|
}
|
|
|
|
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("<html><body>");
|
|
if (visits == 0)
|
|
{
|
|
await context.Response.WriteAsync("Your session has not been established.<br>");
|
|
await context.Response.WriteAsync(DateTime.Now + "<br>");
|
|
await context.Response.WriteAsync("<a href=\"/session\">Establish session</a>.<br>");
|
|
}
|
|
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("</body></html>");
|
|
});
|
|
}
|
|
|
|
public static void Main(string[] args)
|
|
{
|
|
var host = new WebHostBuilder()
|
|
.ConfigureLogging(factory => factory.AddConsole())
|
|
.UseKestrel()
|
|
.UseIISIntegration()
|
|
.UseStartup<Startup>()
|
|
.Build();
|
|
|
|
host.Run();
|
|
}
|
|
}
|
|
}
|