如何在ASP.NET Core中使用Session的示例代碼
ASP.NET Core 是一個跨平臺,開源的,輕量級,高性能 并且 高度模塊化的web框架,Session 可以實現(xiàn)用戶信息存儲從而可以在同一個客戶端的多次請求之間實現(xiàn)用戶追蹤,在 ASP.Net Core 中可以使用 Microsoft.AspNetCore.Session 中間件來啟用 Session 機制。
中間件的價值在于可以在 request -> response 的過程中做一些定制化的操作,比如說:監(jiān)視數(shù)據(jù),切換路由,修改流轉(zhuǎn)過程中的消息體,通常來說:中間件是以鏈式的方式灌入到 ASP.Net Core 的 pipeline 管道中,這篇文章主要討論如何使用 Session 中間件。
安裝 Session 中間件
要想使用 session 中間件,你可以使用 Visual Studio 2019 中的 NuGet package manager 可視化界面進行安裝,或者通過 NuGet package manager console 命令行輸入如下命令:
Install-Package Microsoft.AspNetCore.Session
配置 session 中間件
現(xiàn)在 Microsoft.AspNetCore.Session 已經(jīng)成功安裝到你的項目中了,接下來可以將它添加到 ASP.Net Core pipeline 中,請注意:為了能夠啟動 Session,你必須要使用一個 實現(xiàn)了 IDistributedCache 接口的 cache store 來作為 session 的底層存儲,然后你還要在 ConfigureServices 方法下調(diào)用 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 方法中調(diào)用 UseSession 來啟動 session。
public void Configure(IApplicationBuilder app, IHostingEnvironment env) { app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseSession(); app.UseHttpContextItemsMiddleware(); app.UseMvc(); }
存儲和獲取 session
你可以使用 Set, SetInt32 和 SetString 這三個方法來實現(xiàn) Session 的存儲,這些方法有兩個參數(shù),一個是鍵,一個是鍵對應的數(shù)據(jù),而且 Set 方法的 value 對應的是 byte[] 形式。
類似的,你可以使用 Get,GetInt32 和 GetString 方法來實現(xiàn) session 的讀取,同時 Get 方法接收一個 string 格式的 key,并且返回 byte[] 數(shù)組,要使用這些擴展方法,你需要將 Microsoft.AspNetCore.Http 引用到項目中。
下面的代碼展示了如何將數(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ù)據(jù),可以在 ISession 接口上新增一個擴展方法并且自己來實現(xiàn)序列化邏輯,從 session 中設置或者獲取 復雜類型時,可以把這個類型序列化為 json,或者 json 反序列化為 model。
還有一點要特別注意,默認的 session 是基于內(nèi)存的,也就是說進程關閉了 session 就會丟失,如果你想實現(xiàn)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內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
- 如何解決asp.net負載均衡時Session共享的問題
- Asp.Net Core中基于Session的身份驗證的實現(xiàn)
- 淺談ASP.NET Core中間件實現(xiàn)分布式 Session
- 解析Asp.net Core中使用Session的方法
- asp.net(C#)清除全部Session與單個Session的方法
- 詳解ASP.NET中Session的用法
- ASP.NET ASHX中獲得Session的方法
- ASP.NET將Session保存到數(shù)據(jù)庫中的方法
- asp.net session的使用與過期實例代碼
- Asp.net中判斷一個session是否合法的方法
- ASP.NET MVC在基控制器中處理Session
相關文章
datagrid綁定list沒有數(shù)據(jù) 表頭不顯示的解決方法
datagrid綁定list沒有數(shù)據(jù) 表頭不顯示的問題,那是因為 綁定了null,你給list new一下就好 表頭就會有啦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部署方式,具有一定的參考價值,感興趣的小伙伴們可以參考一下。2017-02-02Asp.net Core中實現(xiàn)自定義身份認證的示例代碼
這篇文章主要介紹了Asp.net Core中實現(xiàn)自定義身份認證的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-05-05