.NET Core 2.1 Session

.NET Core中调用Session的方式与传统ASP.NET MVC不同。

参考

Session and app state in ASP.NET Core

步骤

  1. 配置Session。在Startup.cs中启用Session。
    • [Microsoft.AspNetCore.Session] 提供了管理Session的中间件,此包包含在 [Microsoft.AspNetCore.App] metapackage中
    • 在Startup.cs的ConfigureServices()方法中加入代码,启用Session
      services.AddDistributedMemoryCache();
      
      services.AddSession(options =>
      {
          // Set a short timeout for easy testing.
          options.IdleTimeout = TimeSpan.FromSeconds(10); //设置超时时间
          options.Cookie.HttpOnly = true;
      });
      
      
      app.UseSession();
    • app.UseSession()的位置十分重要,需要写在app.UseMvc()之前,不然会引发InvalidOperationException异常
    • 完成此步骤后,可以通过HttpContext.Session来使用Session
  2. 设置和读取Session。
    • 对Session操作前,需要引入 [Microsoft.AspNetCore.Http]
    • 使用SetString或者SetInt32对Session赋值,使用GetString或GetInt32获取Session的值
      // Requires: using Microsoft.AspNetCore.Http;
      if (string.IsNullOrEmpty(HttpContext.Session.GetString(SessionKeyName)))
      {
          HttpContext.Session.SetString(SessionKeyName, "The Doctor");
          HttpContext.Session.SetInt32(SessionKeyAge, 773);
      }
      
      var name = HttpContext.Session.GetString(SessionKeyName);
      var age = HttpContext.Session.GetInt32(SessionKeyAge);
    • 对于复杂类型的数据,必须用其他工具将其序列化,然后存入Session,例如JSON(原文:Complex types must be serialized by the user using another mechanism, such as JSON.)
  3. 清空Session。
    • 使用Clear()方法清空Session,.NET Core没有Abandon()方法
      HttpContext.Session.Clear();
    • Clear()方法会清空Session,但不会删除Session(StackOverflow原文:This will cause the Session to be empty but not deleted or abandoned.)