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 正在使用中。
会话具有生命周期范围,即对于任何请求,您总是会获得一个新会话。这是必要的,因为每个请求都可以由不同的用户发出。如果要为特定用户存储信息,则需要在单例服务中执行此操作。
在等待前端确认时尝试在会话中存储字符串,但在下一个请求(确认请求)时会话完全为空。
配置
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 正在使用中。
会话具有生命周期范围,即对于任何请求,您总是会获得一个新会话。这是必要的,因为每个请求都可以由不同的用户发出。如果要为特定用户存储信息,则需要在单例服务中执行此操作。