Asp 核心会话在请求结束后不会持续存在

Asp core sessions aren't persisting after requests ends

在等待前端确认时尝试在会话中存储字符串,但在下一个请求(确认请求)时会话完全为空。

配置

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

        services.AddDistributedMemoryCache();

        services.AddSession(options => {
            options.Cookie.Name = ".SingleTouch.API.Session";
            options.IdleTimeout = TimeSpan.FromMinutes(20);
            options.Cookie.IsEssential = true;
            options.Cookie.HttpOnly = true;
        });

        string allowedHosts = Configuration.GetValue<string>("AllowedHosts");
        services.AddCors(options =>
        {
            options.AddPolicy(name: CorsAllowedUrls,
                              builder =>
                              {
                                  builder.WithOrigins(allowedHosts)
                                         .AllowAnyHeader()
                                         .AllowAnyMethod();
                              });
        });

        services.AddControllersWithViews(options =>
            options.Filters.Add(new ApiExceptionFilter()));
    }

 public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }

        app.UseHttpsRedirection();
        app.UseRouting();
        app.UseCors(CorsAllowedUrls);
        app.UseAuthentication();
        app.UseAuthorization();
        app.UseCookiePolicy();
        app.UseSession();

        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller}/{action=Index}/{id?}");
        });
    }

在一个端点我有

_httpContextAccessor.HttpContext.Session.SetString("payEvent", "bro you good?");

并在以下端点上再次检索它

_httpContextAccessor.HttpContext.Session.GetString("payEvent");

但是在检索时,会话是空的。它肯定是最初添加的,因为如果您在第一个请求中检查或 运行 GetString,则该值存在。 Asp 核心 6 正在使用中。

会话具有生命周期范围,即对于任何请求,您总是会获得一个新会话。这是必要的,因为每个请求都可以由不同的用户发出。如果要为特定用户存储信息,则需要在单例服务中执行此操作。