ASP Net Core 2.1 会话

Posted

技术标签:

【中文标题】ASP Net Core 2.1 会话【英文标题】:ASP Net Core 2.1 Session 【发布时间】:2019-04-03 01:23:28 【问题描述】:

我目前正在.Net Core 2.1 中开发 API 使用带有 Nuxt 的 Vue 2 中的客户端应用程序,我在 ASP .Net 的会话中保存对象时遇到问题。 在提出这个问题之前,我已经查看了this 和其他链接,但没有任何东西可以帮助我。 事实证明,我已经用 Postman 尝试过,如果它有效,但我不明白为什么它不适用于我的应用程序。

这是我的 Startup.cs

public class Startup
    
    public Startup(IConfiguration configuration)
    
        Configuration = configuration;
    

public IConfiguration Configuration  get; 

public void ConfigureServices(IServiceCollection services)

    services.Configure<CookiePolicyOptions>(options =>
    
        options.CheckConsentNeeded = context => false;
        options.MinimumSameSitePolicy = SameSiteMode.None;
    );
// Add Database
// End Add Database
    services.AddCors(options => 

    options.AddPolicy("AllowSpecificOrigin", builder =>
    builder.AllowAnyHeader()
           .AllowAnyMethod()
           .AllowAnyOrigin()
));
);
 services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
    .AddDistributedMemoryCache();

    services.AddSession(options =>
    
        options.IdleTimeout = TimeSpan.FromMinutes(1440);
        options.Cookie.HttpOnly = true;
        options.Cookie.IsEssential = true;
    );


public void Configure(IApplicationBuilder app, IHostingEnvironment env)

    if (env.IsDevelopment())
    
        app.UseDeveloperExceptionPage();
    
    else
    
        app.UseHsts();
    

    app.UseCookiePolicy();
    app.UseCors("AllowSpecificOrigin");
    app.UseSession();
    app.UseMvc();


在我的控制器中:

[Route("api/customer/[controller]")]
[ApiController]
public class ClientController : ControllerBase  ...

...获取和设置会话变量

var model = HttpContext.Session.GetString("User")

和其他控制器

HttpContext.Session.SetString("User", "Hello World")

每次我请求 ajax 时,HttpContext 都会更改 id,但邮递员不会更改 Id,这就是我可以恢复 cookie 的原因。

【问题讨论】:

这里估计有问题services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); .AddDistributedMemoryCache();改成services.AddDistributedMemoryCache(); services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1); 谢谢,但这对我不起作用。我不明白为什么邮递员工作,但不是在我的网站上。与 Cors 有什么关系? 【参考方案1】:

在发出 AJAX 请求时,您可能需要设置 withCredentials 标志。对于同站点请求,这不应该是必需的,但是您提到了 CORS 并且没有指定它是同站点。使用 jQuery,这意味着将其添加到您的 AJAX 选项对象中的 xhrFields

$.ajax(
    ...
    xhrFields: 
        withCredentials: true
    
);

其他库可能有不同的方法,但都应该有某种方式在 XMLHttpRequest 对象上设置此标志。

【讨论】:

OHHHH 谢谢,非常感谢,您结束了几天的痛苦。如需进一步参考,我将留下正确答案:nuxt.config.js: /* ** Modules Config */ axios: credentials: true , In my Cors services.AddCors(opt =&gt; opt.AddPolicy("AllowSpecificOrigin", builder =&gt; builder.WithOrigins("http://localhost:3000") .AllowAnyMethod() .AllowAnyHeader() .AllowCredentials() ); ) 有没有办法在外部参数化我的应用程序的这个 URL? http://localhost:3000

以上是关于ASP Net Core 2.1 会话的主要内容,如果未能解决你的问题,请参考以下文章

启用 ASP.Net Core 会话锁定?

ASP.NET Core 会话超时

ASP.Net Core Sql 会话持久化

重定向后 ASP Net Core 2.2 会话丢失

ASP.NET CORE 2.2 WEB APP中的会话过期问题

ASP.NET Core MVC 会话相同的站点 URL