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();

}