代码之家  ›  专栏  ›  技术社区  ›  HenryGuillen17

ASP Net核心2.1会话

  •  1
  • HenryGuillen17  · 技术社区  · 6 年前

    我目前正在.NETCore2.1中开发一个API this 和其他链接之前,问这个问题,但没有什么能够帮助我。 事实证明,我已经尝试了邮递员,如果它的工作,但我不明白为什么它不能与我的应用程序。

    这是我的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,但是postman不会更改id,这就是为什么我可以恢复cookie。

    1 回复  |  直到 6 年前
        1
  •  4
  •   Chris Pratt    6 年前

    withCredentials 发出AJAX请求时标记。对于同一个站点请求,不需要这样做,但是您提到了CORS,并且没有指定它是同一个站点。对于jQuery,这只意味着将它添加到 xhrFields 在AJAX选项对象中:

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

    其他库可能有不同的方法,但是所有库都应该有某种方法在 XMLHttpRequest 对象。