千家信息网

ASP.NET Core 3.1浏览器嗅探如何解决部分浏览器丢失Cookie问题

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了ASP.NET Core 3.1浏览器嗅探如何解决部分浏览器丢失Cookie问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起
千家信息网最后更新 2026年11月01日ASP.NET Core 3.1浏览器嗅探如何解决部分浏览器丢失Cookie问题

这篇文章主要介绍了ASP.NET Core 3.1浏览器嗅探如何解决部分浏览器丢失Cookie问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。


看了前文的同学们应该都知道,搜狗、360等浏览器在单点登录中反复重定向,最终失败报错。

原因在于,非Chrome80+浏览器不识别Cookie上的SameSite=none属性值,导致认证Cookie在后续请求中被抛弃。

截至2020/3/30号,非Chrome浏览器测试包含两种结果:

  • case1:可设置cookie的samesite=none, 浏览器可读取该cookie
  • case2:对cookie设置samesite=none, 浏览器不能读取该cookie
浏览器最新版本号结果备注
IE11case1win10
Edge44.18362.449.0case12020/2/15开始使用chrome内核/70.0.3538.102
Firefox74case1
360急速浏览器12.0.1190.0case1基于chromium78
搜狗浏览器8.6.1.31812case2User-Agent:Chrome/65.0.3314.0
猎豹安全浏览器6.5.115case2User-Agent:Chrome/57.0.2987.98
QQ浏览器10.5.3case1chromium 70
华为手机浏览器10.0.6.304case1
魅族手机浏览器8.5.1case2

嗯,我之前报的360急速浏览器在新版已经更新了Chrome内核,作为主流的搜狗和猎豹浏览器还是使用旧版本Chrome内核,这是要闹哪样?

如果Web应用程序打算支持旧内核浏览器,则需要实现浏览器嗅探。ASP.NET Core不会帮你实现浏览器嗅探,因为User-Agents值易变且经常更改。

但是Microsoft.AspNetCore.CookiePolicy中的扩展点允许插入浏览器嗅探逻辑。

在Startup.Configure中,在调用UseAuthentication或任何写入cookie的方法之前添加调用UseCookiePolicy的代码:

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

app.UseHttpsRedirection();
app.UseStaticFiles();

app.UseRouting();
// 表示ASP.NET Core 启动Cookie策略
app.UseCookiePolicy();
app.UseAuthentication();
app.UseAuthorization();

app.UseEndpoints(endpoints =>
{
endpoints.MapRazorPages();
});
}

在Startup.ConfigureServices, 添加Cookie的策略配置代码:

public void ConfigureServices(IServiceCollection services)
{
services.Configure(options =>
{
options.MinimumSameSitePolicy = (SameSiteMode)(-1);
options.OnAppendCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.OnDeleteCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
});

services.AddRazorPages();
}

private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
if (options.SameSite == SameSiteMode.None)
{
var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
if (MyUserAgentDetectionLib.DisallowsSameSiteNone(userAgent))
{
options.SameSite = SameSiteMode.Unspecified;
}

}
}

上面的例子中,MyUserAgentDetectionLib.DisallowsSameSiteNone 是一个自定义的库文件,侦测不支持SameSite=None的UserAgent。

ASP.NET Core3.1 对与SameSiteMode新增了一个 Unspecified枚举值,表示服务端不会对Cookie设置SameSite属性值, 后面的携带Cookie的事情交给浏览器默认配置。

具体的侦测代码如下:

public static bool DisallowsSameSiteNone(string userAgent)
{
// Check if a null or empty string has been passed in, since this
// will cause further interrogation of the useragent to fail.
if (String.IsNullOrWhiteSpace(userAgent))
return false;

// Cover all iOS based browsers here. This includes:
// - Safari on iOS 12 for iPhone, iPod Touch, iPad
// - WkWebview on iOS 12 for iPhone, iPod Touch, iPad
// - Chrome on iOS 12 for iPhone, iPod Touch, iPad
// All of which are broken by SameSite=None, because they use the iOS networking
// stack.
if (userAgent.Contains("CPU iPhone OS 12") ||
userAgent.Contains("iPad; CPU OS 12"))
{
return true;
}

// Cover Mac OS X based browsers that use the Mac OS networking stack.
// This includes:
// - Safari on Mac OS X.
// This does not include:
// - Chrome on Mac OS X
// Because they do not use the Mac OS networking stack.
if (userAgent.Contains("Macintosh; Intel Mac OS X 10_14") &&
userAgent.Contains("Version/") && userAgent.Contains("Safari"))
{
return true;
}

// Cover Chrome 50-69, because some versions are broken by SameSite=None,
// and none in this range require it.
// Note: this covers some pre-Chromium Edge versions,
// but pre-Chromium Edge does not require SameSite=None.
if (userAgent.Contains("Chrome/5") || userAgent.Contains("Chrome/6"))
{
return true;
}

return false;
}

感谢你能够认真阅读完这篇文章,希望小编分享的"ASP.NET Core 3.1浏览器嗅探如何解决部分浏览器丢失Cookie问题"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

浏览器 浏览 内核 篇文章 代码 搜狗 支持 部分 问题 属性 手机 版本 猎豹 策略 结果 侦测 配置 主流 事情 价值 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 什么是科技互联网 苏州找大状互联网科技有限公司 万易互联网科技 西安互联网科技 智网互联网科技 互联网科技logo设计 唐信互联网科技 大连 滨湖区互联网智能科技产品供应 湖南洣水互联网科技有限公司扣款 剑昆互联网络科技有限公司临桂 全球顶尖互联网科技公司 佛山市拉法互联网科技有限公司 为客找房互联网科技公司怎么样 工业互联网展湾科技股份有限公司 互联网公司高科技产品 扫呗互联网科技有限公司 济南小医互联网科技有限公司招聘 唐山双旺合互联网科技产业园 东风日产互联网科技公司叫什么 互联网科技创新方面的资料 互联网是不是新科技 腾讯阿里互联网科技 上海互联网科技有限公司 剑昆互联网络科技有限公司临桂 福建科技产业互联网发展 宝灵互联网科技有限公司 青岛科技大学互联网大赛研究生 河南住房之家互联网科技 互联网科技包装股 六子台科技互联网展会
0