前言
Session 是保存用户和 Web 应用的会话状态的一种方法,ASP.NET Core 提供了一个用于管理会话状态的中间件。在本文中我将会简单介绍一下 ASP.NET Core 将Redis作为 Session 的使用方法。
在Nuget中安装以下依赖包:
- Microsoft.AspNetCore.Session
使用
需要注意的一点是,要使用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、配置
在Startup.cs中的 ConfigureServices方法下添加:
//使用Session
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
});
//持久化Session
services.AddDistributedMemoryCache();
此时 ConfigureServices 方法如下所示:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies is needed for a given request.
options.CheckConsentNeeded = context => false;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
//使用Session
services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
});
//持久化Session
services.AddDistributedMemoryCache();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
}
2、启用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?}");
});
}
3、测试
在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.");
}
运行结果:
文章评论