未在 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");
}
});
}
以下是我迄今为止尝试过的一些方法:
- 将
IsEssential
条件添加到会话选项
- 删除
CookiePolicyOptions
和 UseCookiePolicy
- 正在尝试向会话 cookie 添加过期日期(甚至没有启动解决方案)
打开 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"
}
});
会话 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");
}
});
}
以下是我迄今为止尝试过的一些方法:
- 将
IsEssential
条件添加到会话选项 - 删除
CookiePolicyOptions
和UseCookiePolicy
- 正在尝试向会话 cookie 添加过期日期(甚至没有启动解决方案)
打开 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"
}
});