如何在ASP.NET Core中使用Session的示例代碼
ASP.NET Core 是一個(gè)跨平臺(tái),開源的,輕量級(jí),高性能 并且 高度模塊化的web框架,Session 可以實(shí)現(xiàn)用戶信息存儲(chǔ)從而可以在同一個(gè)客戶端的多次請(qǐng)求之間實(shí)現(xiàn)用戶追蹤,在 ASP.Net Core 中可以使用 Microsoft.AspNetCore.Session 中間件來啟用 Session 機(jī)制。
中間件的價(jià)值在于可以在 request -> response 的過程中做一些定制化的操作,比如說:監(jiān)視數(shù)據(jù),切換路由,修改流轉(zhuǎn)過程中的消息體,通常來說:中間件是以鏈?zhǔn)降姆绞焦嗳氲?ASP.Net Core 的 pipeline 管道中,這篇文章主要討論如何使用 Session 中間件。
安裝 Session 中間件
要想使用 session 中間件,你可以使用 Visual Studio 2019 中的 NuGet package manager 可視化界面進(jìn)行安裝,或者通過 NuGet package manager console 命令行輸入如下命令:
Install-Package Microsoft.AspNetCore.Session
配置 session 中間件
現(xiàn)在 Microsoft.AspNetCore.Session 已經(jīng)成功安裝到你的項(xiàng)目中了,接下來可以將它添加到 ASP.Net Core pipeline 中,請(qǐng)注意:為了能夠啟動(dòng) Session,你必須要使用一個(gè) 實(shí)現(xiàn)了 IDistributedCache 接口的 cache store 來作為 session 的底層存儲(chǔ),然后你還要在 ConfigureServices 方法下調(diào)用 AddSession 方法將其塞入 IOC 容器,最后在 Startup.Configure 方法下使用 UseSession 將其塞入到 request -> response 請(qǐng)求管道中,具體代碼如下:
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 方法中調(diào)用 UseSession 來啟動(dòng) session。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseSession(); app.UseHttpContextItemsMiddleware(); app.UseMvc(); }
存儲(chǔ)和獲取 session
你可以使用 Set, SetInt32 和 SetString 這三個(gè)方法來實(shí)現(xiàn) Session 的存儲(chǔ),這些方法有兩個(gè)參數(shù),一個(gè)是鍵,一個(gè)是鍵對(duì)應(yīng)的數(shù)據(jù),而且 Set 方法的 value 對(duì)應(yīng)的是 byte[] 形式。
類似的,你可以使用 Get,GetInt32 和 GetString 方法來實(shí)現(xiàn) session 的讀取,同時(shí) Get 方法接收一個(gè) string 格式的 key,并且返回 byte[] 數(shù)組,要使用這些擴(kuò)展方法,你需要將 Microsoft.AspNetCore.Http 引用到項(xiàng)目中。
下面的代碼展示了如何將數(shù)據(jù)添加到 session 中。
public IActionResult Index() { HttpContext.Session.SetString("Message", "Hello World!"); HttpContext.Session.SetInt32("Year", 2019); return View(); }
接下來再看看如何從 session 中獲取數(shù)據(jù),如下代碼所示:
public IActionResult About() { ViewBag.Message = HttpContext.Session.GetString("Message"); ViewBag.Year = HttpContext.Session.GetInt32("Year"); return View(); }
如果你想設(shè)置或者獲取屬于其他類型的數(shù)據(jù),可以在 ISession 接口上新增一個(gè)擴(kuò)展方法并且自己來實(shí)現(xiàn)序列化邏輯,從 session 中設(shè)置或者獲取 復(fù)雜類型時(shí),可以把這個(gè)類型序列化為 json,或者 json 反序列化為 model。
還有一點(diǎn)要特別注意,默認(rèn)的 session 是基于內(nèi)存的,也就是說進(jìn)程關(guān)閉了 session 就會(huì)丟失,如果你想實(shí)現(xiàn)session持久化,可以采用 sqlserver 或者 redis。
譯文鏈接:https://www.infoworld.com/article/3411563/how-to-work-with-session-state-in-aspnet-core.html
到此這篇關(guān)于如何在ASP.NET Core中使用Session的示例代碼的文章就介紹到這了,更多相關(guān)ASP.NET Core使用Session內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 如何解決asp.net負(fù)載均衡時(shí)Session共享的問題
- Asp.Net Core中基于Session的身份驗(yàn)證的實(shí)現(xiàn)
- 淺談ASP.NET Core中間件實(shí)現(xiàn)分布式 Session
- 解析Asp.net Core中使用Session的方法
- asp.net(C#)清除全部Session與單個(gè)Session的方法
- 詳解ASP.NET中Session的用法
- ASP.NET ASHX中獲得Session的方法
- ASP.NET將Session保存到數(shù)據(jù)庫中的方法
- asp.net session的使用與過期實(shí)例代碼
- Asp.net中判斷一個(gè)session是否合法的方法
- ASP.NET MVC在基控制器中處理Session
相關(guān)文章
.NET Core 2.0如何生成圖片驗(yàn)證碼完整實(shí)例
這篇文章主要給大家介紹了關(guān)于.NET Core 2.0如何生成圖片驗(yàn)證碼的相關(guān)資料,該功能主要是利用ZKWeb.System.Drawing來實(shí)現(xiàn),文中給出了詳細(xì)的示例代碼供大家參考學(xué)習(xí),需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-07-07datagrid綁定list沒有數(shù)據(jù) 表頭不顯示的解決方法
datagrid綁定list沒有數(shù)據(jù) 表頭不顯示的問題,那是因?yàn)?綁定了null,你給list new一下就好 表頭就會(huì)有啦2013-05-05Asp.Net 數(shù)據(jù)操作類(附通用數(shù)據(jù)基類)
數(shù)據(jù)操作類代碼,方便在asp.net操作數(shù)據(jù)庫2008-11-11剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式
這篇文章主要介紹了剖析Asp.Net Web API路由系統(tǒng)---WebHost部署方式,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下。2017-02-02Asp.net Core中實(shí)現(xiàn)自定義身份認(rèn)證的示例代碼
這篇文章主要介紹了Asp.net Core中實(shí)現(xiàn)自定義身份認(rèn)證的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05在運(yùn)行時(shí)編輯代碼的 .NET 熱重載的操作方法
今天通過本文給大家分享 Visual Studio 2019 中 16.11(預(yù)覽版1)中的 .NET 熱重載(通過 .NET 6(預(yù)覽版4)中的 dotnet watch 命令行工具),介紹什么是 .NET 熱重載,如何使用這個(gè)特征,感興趣的朋友跟隨小編一起學(xué)習(xí)下吧2021-07-07