【问题标题】:Session cookie not being set on Edge (dot net core)未在 Edge 上设置会话 cookie(点网核心)
【发布时间】:2019-07-19 09:35:07
【问题描述】:

在 Chrome、FireFox 甚至 IE 上设置会话 cookie,但在 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");
   }
  });
 }

以下是我目前尝试过的一些方法:

  • 将IsEssential 条件添加到会话选项
  • 删除 CookiePolicyOptions 和 UseCookiePolicy
  • 尝试向会话 cookie 添加过期日期(甚至没有启动解决方案)

【问题讨论】:

  • 碰巧,您是否尝试在 Edge 打开新选项卡/窗口后设置 cookie?
  • @PaulCream 不,会话 cookie 应该直接在应用程序启动时设置,仅供参考,我发现问题出在哪里,我会发布答案

标签: session cookies .net-core session-cookies microsoft-edge


【解决方案1】:

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

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

不要将其添加到标题中

来自HERE的报价

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

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

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

我猜 Edge 尚未实现该默认设置

这是一个有效的 fetch 示例

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

【讨论】:

    【解决方案2】:

    打开 Edge 设置并点击“高级设置”,在 Cookies 部分下,选择“Under Cookies 部分”选项,然后重新测试您的应用程序。

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

    【讨论】:

    • 我不确定你的意思。但我的 cookie 设置为“不阻止 cookie”
    猜你喜欢
    • 2018-08-22
    • 2019-11-18
    • 2020-02-07
    • 1970-01-01
    • 1970-01-01
    • 2016-10-30
    • 2020-11-27
    • 2015-02-26
    • 2011-07-13
    相关资源
    最近更新 更多