共计 2092 个字符,预计需要花费 6 分钟才能阅读完成。
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/art…