ASP.NET Core Web应用存在Session串扰问题 修改配置后部分用户仍触发异常
ASP.NET Core Session 串扰问题定位与修复方案
前置基础校验
首先修正代码中Session读写键名不匹配的问题:你当前写入使用的键为MandateSession_Data,读取使用的键为Session_Data,键名不一致会导致读取到空值或错误值,建议用常量统一管理所有Session键,避免拼写错误。
问题定位步骤
- 确认Session存储架构与部署方式:如果使用默认内存存储Session,且服务部署了多实例、开启了负载均衡但未配置粘滞会话,用户请求会被随机分配到不同实例,不同实例的内存Session不互通,就会出现少量用户读不到/读到错误Session的情况
- 全链路加日志排查:每次读写Session时同步记录
HttpContext.Session.Id、当前用户唯一标识(如用户ID、客户端IP)、请求的服务实例标识、读写的Session内容,拿到异常用户的日志后,对比异常请求的Session ID是否与其他用户的Session ID重复,是否请求被分配到了未写入对应Session的实例 - 排查静态变量/单例缓存逻辑:检查是否存在将Session内容赋值给静态字段、静态属性的代码,或是将
IHttpContextAccessor注入到单例服务中缓存了HttpContext实例的逻辑,静态变量与单例缓存的内容是进程全局共享的,多并发请求下会出现会话数据串用 - 检查反向代理/CDN配置:如果服务前置了Nginx、CDN等代理服务,确认是否错误开启了动态请求的响应缓存,或是Cookie透传配置错误,导致多个用户拿到同一个Session Cookie
修复方案
- 统一Session读写键,示例代码如下:
// 统一管理Session键的静态类 public static class SessionConsts { public const string MandateSessionData = "MandateSession_Data"; } // 写入Session HttpContext.Session.SetString(SessionConsts.MandateSessionData, Session_Data); // 读取Session var sessionData = HttpContext.Session.GetString(SessionConsts.MandateSessionData);
- 多实例部署场景下二选一配置:
- 负载均衡侧开启粘滞会话,保证同一个用户的所有请求都分配到同一个服务实例
- 改用分布式Session存储,如Redis、SqlServer,示例Redis分布式Session配置:
// Program.cs 配置 builder.Services.AddStackExchangeRedisCache(options => { options.Configuration = "Redis连接字符串"; options.InstanceName = "YourApp_Session_"; }); builder.Services.AddSession(options => { options.Cookie.Name = ".YourApp.Session"; options.IdleTimeout = TimeSpan.FromMinutes(30); options.Cookie.HttpOnly = true; options.Cookie.IsEssential = true; // 生产HTTPS环境建议开启 options.Cookie.SecurePolicy = CookieSecurePolicy.Always; options.Cookie.SameSite = SameSiteMode.Lax; }); // 中间件顺序要保证:UseRouting 之后,UseAuthorization 之前调用UseSession app.UseRouting(); app.UseSession(); app.UseAuthorization(); - 移除所有用静态变量存储用户会话数据的逻辑,用户级别的数据只能存储在Session、
HttpContext.Items或是生命周期为Scoped的服务中 - 单例服务如需获取
HttpContext,每次都要从根IServiceProvider创建Scope后获取,禁止缓存HttpContext实例 - 调整反向代理配置,关闭所有需要身份验证、携带Session的动态接口的缓存规则,保证Session Cookie正常透传
内容的提问来源于stack exchange,提问作者Kashinath
相关产品推荐
相关产品推荐

