一、配置回话状态

若要启用会话中间件,Startup 必须包含:

  • ASP.NET Core 中的分布式缓存。
  • AddSession 的调用。
  • UseSession 的调用。
public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddDistributedMemoryCache();

        services.AddSession(options =>
        {
            // Set a short timeout for easy testing.
            options.IdleTimeout = TimeSpan.FromSeconds(10);
            options.Cookie.HttpOnly = true;
            // Make the session cookie essential
            options.Cookie.IsEssential = true;
        });

        services.AddMvc()
            .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);
    }

    public void Configure(IApplicationBuilder app, IHostingEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
        else
        {
            app.UseExceptionHandler("/Error");
            app.UseHsts();
        }

        app.UseHttpsRedirection();
        app.UseStaticFiles();
        app.UseSession();
        app.UseHttpContextItemsMiddleware();
        app.UseMvc();
    }
}

 

中间件排序。

HttpContext.Session 可用。

调用 UseSession 以前无法访问 HttpContext.Session

此异常记录在 Web 服务器日志中但不显示在浏览器中。

二、以异步方式加载会话状态

如果未先调用 LoadAsync,则会同步加载基础会话记录,这可能对性能产生大规模影响。

在服务容器中注册的已包装的版本。

三、会话选项

SessionOptions。

选项 说明
Cookie IsEssential 默认为 false
IdleTimeout 默认为 20 分钟。
IOTimeout 默认值为 1 分钟。

HttpOnly 默认为 true)。

若要替换 Cookie 会话默认值,请使用 SessionOptions

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.CheckConsentNeeded = context => true;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    });

    services.AddDistributedMemoryCache();

    services.AddMvc()
        .SetCompatibilityVersion(CompatibilityVersion.Version_2_2);

    services.AddSession(options =>
    {
        options.Cookie.Name = ".AdventureWorks.Session";
        options.IdleTimeout = TimeSpan.FromSeconds(10);
        options.Cookie.IsEssential = true;
    });
}

 

会话中间件传递的每个请求都会重置超时。

两个请求试图修改不同的会话值时,后一个请求可能替代前一个做出的会话更改。

四、设置和获取会话值

ISession 实现。

Microsoft.AspNetCore.App 元包中。

ISession 扩展方法:

以下示例在 Razor Pages 页中检索 IndexModel.SessionKeyName 键(示例应用中的 _Name)的会话值:

@page
@using Microsoft.AspNetCore.Http
@model IndexModel

...

Name: @HttpContext.Session.GetString(IndexModel.SessionKeyName)

 

 

更多:

.Net Core3 新特性整理

Asp.net Core CacheHelper 通用缓存帮助类

.NetCore中EFCore的使用整理(三)-关联表操作

 

相关文章:

  • 2021-12-14
  • 2022-01-05
  • 2022-03-02
  • 2021-06-02
猜你喜欢
  • 2022-03-09
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-10-04
相关资源
相似解决方案