1.通过NuGet安装Microsoft.AspNetCore.Session包
2.启动会话中间件
包含 IDistributedCache 内存缓存。 IDistributedCache 实现用作会话后备存储。
在 ConfigureServices 方法中调用 AddSession 配置session。
在 Configure 方法中调用 UseSession 。
下面是代码实现
Startup类
public void ConfigureServices(IServiceCollection services)
{
//添加IDistributedCache 默认内存实现(官方文档要求加,不加也能正常使用session)
services.AddDistributedMemoryCache();
//添加Seesion服务
services.AddSession(options => {
options.IdleTimeout = TimeSpan.FromSeconds(600);//闲置过期时间
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
services.AddControllersWithViews();
}
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
}
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
//在 UseRouting 之后和 UseEndpoints 之前调用 UseSession
app.UseSession();
app.UseEndpoints(endpoints =>
{
endpoints.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
});
}
HomeController类
public IActionResult Index()
{
var content = System.Text.UTF8Encoding.UTF8.GetBytes("abcd一二三四");
//设置Session值
HttpContext.Session.Set("TestSession", content);
//使用扩展方法设置Session值
HttpContext.Session.SetString("testSession2", "张三");
return View();
}
public IActionResult Privacy()
{
byte[] content;
string contentStr = "";
if(HttpContext.Session.TryGetValue("TestSession", out content))
{
contentStr = System.Text.UTF8Encoding.UTF8.GetString(content);
}
//获取Session值
ViewData["sessionValue"] = contentStr;
//使用扩展方法获取Session值
ViewData["sessionValue2"] = HttpContext.Session.GetString("testSession2");
return View();
}