前言
Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件。在本文中我将会简单介绍一下 ASP.NET Core 将Redis作为 Session 的使用方法。
要将Redis作为Session的前提条件是安装并启用了Session,并在Nuget中安装以下两个包:
- Microsoft.AspNetCore.Session
- Microsoft.Extensions.Caching.Redis
Windows版Redis下载地址:https://github.com/MSOpenTech/redis/releases/download/win-3.2.100/Redis-x64-3.2.100.msi
使用
需要注意的一点是,要使用Session,必须将
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
中的options.CheckConsentNeeded = context => true;修改为options.CheckConsentNeeded = context => false;true表示用户是否同意cookie协议。当为true时而又无弹窗提示用户是否同意时,将导致session无法回传,故设置为false才可正常使用session。因为SessionID是存放在用户浏览器Cookie当中的,如果不回传SessionId,肯定就没法获取当前设置的Session。
1、Redis连接字符串
在appsettings.json中添加Redis连接字符串。
"ConnectionStrings": {
"RedisSessionConnectionString": "127.0.0.1:6379,password=easy_net_770702827,ConnectTimeout=3000,defaultdatabase=1"
},
2、配置
在Startup.cs中的 ConfigureServices方法下添加:
//获取连接字符串
var sessionConnectionString = Configuration.GetConnectionString("RedisSessionConnectionString");
//使用Session
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
});
//使用Redis作为Session缓存
services.AddDistributedRedisCache(options =>
{
options.Configuration = sessionConnectionString;
options.InstanceName = "HFMSCache";
});
此时 ConfigureServices 方法如下所示:
public void ConfigureServices(IServiceCollection services)
{
var sessionConnectionString = Configuration.GetConnectionString("RedisSessionConnectionString");
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//使用Session
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
});
//使用Redis作为Session缓存
services.AddDistributedRedisCache(options =>
{
options.Configuration = sessionConnectionString;
options.InstanceName = "HFMSCache";
});
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
3、启用Session
在Configure方法中添加:
app.UseSession();
注意:UseSession必须在UseMvc之前!
此时 Configure 方法如下所示:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
4、测试
在HomeController下面修改方法Index和添加方法Set。分别是设置Session和获取Session,这里就不再赘述,直接列出代码。
public IActionResult Index()
{
string user = HttpContext.Session.GetString("USER");
if (string.IsNullOrEmpty(user))
{
ViewBag.Value = "Get user data failed.";
}
else
{
ViewBag.Value = user;
}
return View();
}
public IActionResult Set()
{
HttpContext.Session.SetString("USER", "https://www.quarkbook.com/");
return Content("Set value successful.");
}
运行结果:
文章评论