1. 程式人生 > 程式設計 >如何在ASP.NET Core中使用Session的示例程式碼

如何在ASP.NET Core中使用Session的示例程式碼

ASP.NET Core 是一個跨平臺,開源的,輕量級,高效能 並且 高度模組化的web框架,Session 可以實現使用者資訊儲存從而可以在同一個客戶端的多次請求之間實現使用者追蹤,在 ASP.Net Core 中可以使用 Microsoft.AspNetCore.Session 中介軟體來啟用 Session 機制。

中介軟體的價值在於可以在 request -> response 的過程中做一些定製化的操作,比如說:監視資料,切換路由,修改流轉過程中的訊息體,通常來說:中介軟體是以鏈式的方式灌入到 ASP.Net Core 的 pipeline 管道中,這篇文章主要討論如何使用 Session 中介軟體。

安裝 Session 中介軟體

要想使用 session 中介軟體,你可以使用 Visual Studio 2019 中的 NuGet package manager 視覺化介面進行安裝,或者通過 NuGet package manager console 命令列輸入如下命令:

Install-Package Microsoft.AspNetCore.Session

配置 session 中介軟體

現在 Microsoft.AspNetCore.Session 已經成功安裝到你的專案中了,接下來可以將它新增到 ASP.Net Core pipeline 中,請注意:為了能夠啟動 Session,你必須要使用一個 實現了 IDistributedCache 介面的 cache store 來作為 session 的底層儲存,然後你還要在 ConfigureServices 方法下呼叫 AddSession 方法將其塞入 IOC 容器,最後在 Startup.Configure 方法下使用 UseSession 將其塞入到 request -> response 請求管道中,具體程式碼如下:

  public void ConfigureServices(IServiceCollection services)
  {
    services.AddDistributedMemoryCache();
    services.AddSession(options =>
    {
      options.IdleTimeout = TimeSpan.FromSeconds(5);
      options.Cookie.HttpOnly = true;
      options.Cookie.IsEssential = true;
    });
    services.AddMvc()
      .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
  }

一旦 session 中介軟體加入到了 IOC 容器之後,接下來可以在 Configure 方法中呼叫 UseSession 來啟動 session。

  public void Configure(IApplicationBuilder app,IHostingEnvironment env)
  {
    app.UseHttpsRedirection();
    app.UseStaticFiles();
    app.UseSession();
    app.UseHttpContextItemsMiddleware();
    app.UseMvc();
  }

儲存和獲取 session

你可以使用 Set,SetInt32 和 SetString 這三個方法來實現 Session 的儲存,這些方法有兩個引數,一個是鍵,一個是鍵對應的資料,而且 Set 方法的 value 對應的是 byte[] 形式。

類似的,你可以使用 Get,GetInt32 和 GetString 方法來實現 session 的讀取,同時 Get 方法接收一個 string 格式的 key,並且返回 byte[] 陣列,要使用這些擴充套件方法,你需要將 Microsoft.AspNetCore.Http 引用到專案中。

下面的程式碼展示瞭如何將資料新增到 session 中。

public IActionResult Index()
{
  HttpContext.Session.SetString("Message","Hello World!");
  HttpContext.Session.SetInt32("Year",2019);
  return View();
}

接下來再看看如何從 session 中獲取資料,如下程式碼所示:

public IActionResult About()
{
  ViewBag.Message = HttpContext.Session.GetString("Message");
  ViewBag.Year = HttpContext.Session.GetInt32("Year");
  return View();
}

如果你想設定或者獲取屬於其他型別的資料,可以在 ISession 介面上新增一個擴充套件方法並且自己來實現序列化邏輯,從 session 中設定或者獲取 複雜型別時,可以把這個型別序列化為 json,或者 json 反序列化為 model。

還有一點要特別注意,預設的 session 是基於記憶體的,也就是說程序關閉了 session 就會丟失,如果你想實現session持久化,可以採用 sqlserver 或者 redis。

譯文連結:https://www.infoworld.com/article/3411563/how-to-work-with-session-state-in-aspnet-core.html

到此這篇關於如何在ASP.NET Core中使用Session的示例程式碼的文章就介紹到這了,更多相關ASP.NET Core使用Session內容請搜尋我們以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援我們!