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

Chr*_*dad 5 cookies session session-cookies .net-core microsoft-edge

会话 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");
   }
  });
 }
Run Code Online (Sandbox Code Playgroud)

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

  • IsEssential条件添加到会话选项
  • 删除CookiePolicyOptionsUseCookiePolicy
  • 试图给会话cookie添加过期日期(甚至没有启动解决方案)

Chr*_*dad 7

fetchEdge上使用会导致set-cookie标头未在浏览器上设置 cookie

解决方案是添加credentials: "same-origin"fetch选项对象

请勿将其添加到标题中

来自这里的报价

默认情况下,fetch 不会发送或接收任何 cookie

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

自 2017 年 8 月 25 日起。规范将默认凭据策略更改为同源。

我猜Edge还没有实现那个默认值

这是一个工作示例 fetch

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