未在 Edge 上设置会话 cookie(点网核心)

Session cookie not being set on Edge (dot net core)

会话 cookie 在 Chrome、FireFox 甚至 IE 上设置,但在 Edge

上没有设置

浏览器版本为Microsoft Edge 42.17134.1.0

DotNet 核心版本为 2.1

我的 startup.cs 文件中使用了以下信息

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

  services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1).AddJsonOptions(options => {
   options.SerializerSettings.ContractResolver = new Newtonsoft.Json.Serialization.DefaultContractResolver();
  }).AddSessionStateTempDataProvider();

  services.AddDistributedMemoryCache();

  services.AddSession(o => {
   o.IdleTimeout = TimeSpan.FromMinutes(80);
   o.Cookie.HttpOnly = true;
   o.Cookie.Name = "my-session-cookie";

  });
 }

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

  app.UseHttpsRedirection();
  app.UseStaticFiles();
  app.UseCookiePolicy();
  app.UseSession();

  app.UseSpaStaticFiles();

  app.UseMvc(routes => {
   routes.MapRoute(
    name: "default",
    template: "{controller}/{action=Index}/{id?}");
  });

  app.UseSpa(spa => {
   spa.Options.SourcePath = "ClientApp";

   if (env.IsDevelopment()) {
    spa.UseReactDevelopmentServer(npmScript: "start");
   }
  });
 }

以下是我迄今为止尝试过的一些方法:

打开 Edge 设置并单击 "Advanced settings",在 Cookies 部分下,select "Under Cookies section" 选项,然后重新测试您的应用程序。

如果仍然无法正常工作,请尝试 reset your browser 配置为默认值并再次测试您的网站。

Edge 上使用 fetch 会导致 set-cookie header 无法在浏览器上设置 cookie

解决方案是将 credentials: "same-origin" 添加到 fetch 选项 object

请勿将其添加到 HEADER

引用自HERE

By default, fetch won't send or receive any cookies

这意味着您已经向其中添加凭据 object,以便它可以设置这些 cookie

Since Aug 25, 2017. The spec changed the default credentials policy to same-origin.

我想 Edge 还没有实现那个默认设置

这是一个有效的例子 fetch

fetch(link, {
  body: JSON.stringify(myDataObject),
  method: "POST",
  credentials: "same-origin",
  headers: {
    "content-type": "application/json"
  }
});