状态管理
可以使用几种方法存储状态。 本主题稍后将对每个方法进行介绍。
Cookie
Cookie 存储所有请求的数据。
会话状态
会话状态是在用户浏览 Web 应用时用来存储用户数据的 ASP.NET Core 方案。
配置会话状态
Microsoft.AspNetCore.Session 包提供中间件来管理会话状态。
以下代码演示如何使用 IDistributedCache 的默认内存中实现设置内存中会话提供程序:
public class Startup {
public void ConfigureServices (IServiceCollection services) {
// Session 依赖于 cookie,所以要配置 cookie
services.Configure<CookiePolicyOptions> (options => {
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
// Session 使用缓存,所有这里配置内存缓存
services.AddDistributedMemoryCache ();
// 注册 Session 服务
services.AddSession (options => {
options.IdleTimeout = TimeSpan.FromSeconds (10);
options.Cookie.HttpOnly = true;
});
services.AddMvc ()
.SetCompatibilityVersion (CompatibilityVersion.Version_2_1);
}
public void Configure (IApplicationBuilder app, IHostingEnvironment env) {
if (env.IsDevelopment ()) {
app.UseDeveloperExceptionPage ();
} else {
app.UseExceptionHandler ("/Error");
app.UseHsts ();
}
app.UseHttpsRedirection ();
app.UseStaticFiles ();
// 启用 cookie
app.UseCookiePolicy ();
// 启用 Session
app.UseSession ();
app.UseHttpContextItemsMiddleware ();
app.UseMvc ();
}
}
配置会话状态后,HttpContext.Session 可用。
以异步方式加载会话状态
只有在 TryGetValue、Set 或 Remove 方法之前显式调用 ISession.LoadAsync 方法,ASP.NET Core 中的默认会话提供程序才会从基础 IDistributedCache 后备存储以异步方式加载会话记录。 如果未先调用 LoadAsync,则会同步加载基础会话记录
设置和获取会话值
ISession 扩展方法:
Get(ISession, String)
GetInt32(ISession, String)
GetString(ISession, String)
SetInt32(ISession, String, Int32)
SetString(ISession, String, String)