ASP.NET Core 使用Redis存储Session

首先创建ASP.NET CORE Web项目,然后按如下顺序操作。

1.添加nuget程序包:

Microsoft.AspNetCore.Session;
Microsoft.AspNetCore.DataProtection.Redis;
Microsoft.Extensions.Caching.Redis.Core;
Microsoft.AspNetCore.Http;     //使用Session时有扩展方法

2.在appsettings.json中添加Redis配置:

 1 {
 2   "Logging": {
 3     "IncludeScopes": false,
 4     "LogLevel": {
 5       "Default": "Warning"
 6     }
 7   },
 8   "WebConfig": {
 9     "Redis": {
10       "Connection": "127.0.0.1:6379,allowAdmin=true,password=123456,defaultdatabase=5",
11       "InstanceName": "Test_Redis_Session_"
12     },
13     "SessionTimeOut": "30" //session过期时长,分钟
14   }
15 }

3.在startup.cs类中,按如下例子添加代码:

 1         // This method gets called by the runtime. Use this method to add services to the container.
 2         public void ConfigureServices(IServiceCollection services)
 3         {
 4             // Add framework services.
 5             services.AddMvc();
 6 
 7             #region 使用Redis保存Session
 8             var redisConn = Configuration["WebConfig:Redis:Connection"];
 9             var redisInstanceName = Configuration["WebConfig:Redis:InstanceName"];
10             //Session 过期时长分钟
11             var sessionOutTime = Configuration.GetValue<int>("WebConfig:SessionTimeOut", 30);
12 
13             var redis = StackExchange.Redis.ConnectionMultiplexer.Connect(redisConn);
14             services.AddDataProtection().PersistKeysToRedis(redis, "DataProtection-Test-Keys");
15             services.AddDistributedRedisCache(option =>
16             {
17                 //redis 连接字符串
18                 option.Configuration = redisConn;
19                 //redis 实例名
20                 option.InstanceName = redisInstanceName;
21             }
22             );
23             #endregion
24 
25             //添加Session并设置过期时长
26             services.AddSession(options => { options.IdleTimeout = TimeSpan.FromMinutes(sessionOutTime); });
27         }
28 
29         // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
30         public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
31         {
32             loggerFactory.AddConsole(Configuration.GetSection("Logging"));
33             loggerFactory.AddDebug();
34 
35 
36             app.UseSession();
37 
38             if (env.IsDevelopment())
39             {
40                 app.UseDeveloperExceptionPage();
41                 app.UseBrowserLink();
42             }
43             else
44             {
45                 app.UseExceptionHandler("/Home/Error");
46             }
47 
48             app.UseStaticFiles();
49 
50             app.UseMvc(routes =>
51             {
52                 routes.MapRoute(
53                     name: "default",
54                     template: "{controller=Home}/{action=Index}/{id?}");
55             });
56         }

4.在控制器HomeController中添加:

 1     public class HomeController : Controller
 2     {
 3         public IActionResult Index()
 4         {
 5             ViewData["UserName"] = this.HttpContext.Session.GetString("UserName");
 6             ViewData["PassWord"] = this.HttpContext.Session.GetString("PassWord");
 7             return View();
 8         }
 9 
10 
11         [HttpPost]
12         public NoContentResult Add(string userName,string pwd)
13         {
14             this.HttpContext.Session.SetString("UserName", userName);
15 
16             this.HttpContext.Session.SetString("PassWord", pwd);
17 
18             return NoContent();
19         }

5.在View/Index.cshtml添加如下代码:

 1     …………
 2 <form method="post" action="../Home/Add">
 3     <div>
 4         <input name="username"  type="text" value="@ViewData["UserName"]" />
 5         <input name="pwd"  type="password" value="" />
 6         <input type="submit" value="更新" />
 7         <h1>提交用户名称为:@ViewData["UserName"]    密码:@ViewData["PassWord"]</h1>
 8         <a href="javascript:void(0);" onclick="window.location.reload();">刷新显示最新值</a>
 9     </div>
10 </form>
11   …………

6.下载Demo