You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

升级Microsoft.Web.RedisSessionStateProvider至5.0.4后ASP.NET应用出现过多重定向问题

升级Microsoft.Web.RedisSessionStateProvider至5.0.4后ASP.NET应用出现过多重定向问题

看起来你在升级Redis会话状态提供器后碰到了重定向循环的问题,我之前维护.NET Framework 4.8项目时也遇到过类似情况,结合你的web.config配置,咱们一步步来排查解决:

一、先调整Redis会话提供器的配置兼容性

新版本的Microsoft.Web.RedisSessionStateProvider 5.x对配置参数的处理有一些变化,先修改你的会话提供器配置试试:

<sessionState mode="Custom" customProvider="RedisSessionProvider" timeout="120">
  <providers>
    <add name="RedisSessionProvider" 
         type="Microsoft.Web.Redis.RedisSessionStateProvider, Microsoft.Web.RedisSessionStateProvider" 
         connectionString="127.0.0.1:6379,ssl=false"
         throwOnError="true"
         retryTimeoutInMilliseconds="5000" />
  </providers>
</sessionState>
  • 改用connectionString参数代替单独的host/port/ssl:5.x版本更推荐统一的连接字符串格式,避免参数解析逻辑不一致的问题
  • 加上throwOnError="true":强制暴露Redis连接或会话操作的底层错误(旧版本默认可能隐藏这类错误,导致会话创建失败触发重定向循环)

二、检查异步会话模块的必要性

你的web.config里手动注册了SessionStateModuleAsync,但RedisSessionStateProvider 5.x本身已经内置异步会话支持,额外注册这个模块可能会和提供器产生冲突:

  1. 暂时注释掉<modules>里的Session模块配置:
<!-- <remove name="Session" /> -->
<!-- <add name="Session" type="Microsoft.AspNet.SessionState.SessionStateModuleAsync, Microsoft.AspNet.SessionState.SessionStateModule" preCondition="integratedMode" /> -->
  1. 让系统使用默认的SessionStateModule,5.x提供器会自动处理异步会话逻辑

三、调整程序集绑定重定向(解决依赖冲突)

看你的runtime配置里,部分依赖的版本可能和RedisSessionStateProvider 5.0.4不兼容,重点更新以下两个绑定:

<dependentAssembly>
  <assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-6.0.0.0" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
  <assemblyIdentity name="Microsoft.AspNet.SessionState.SessionStateModule" publicKeyToken="31bf3856ad364e35" culture="neutral" />
  <bindingRedirect oldVersion="0.0.0.0-2.2.0.0" newVersion="2.2.0.0" />
</dependentAssembly>
  • System.Runtime.CompilerServices.UnsafeStackExchange.Redis(Redis提供器的核心依赖)的关键组件,5.x版本的提供器需要至少6.0版本的支持
  • 同步更新Microsoft.AspNet.SessionState.SessionStateModule的绑定到2.2.0,这是和5.x提供器匹配的兼容版本

四、清理旧会话数据并重启服务

  1. 打开本地Redis的命令行工具(redis-cli),执行:
FLUSHALL
  1. 重启你的ASP.NET应用程序池,清除本地缓存的程序集和残留会话数据

五、启用日志排查深层问题

如果以上步骤还没解决,开启Redis提供器的详细日志,定位底层错误:

  1. 在会话提供器配置里添加日志类:
<add name="RedisSessionProvider" 
     type="Microsoft.Web.Redis.RedisSessionStateProvider, Microsoft.Web.RedisSessionStateProvider" 
     connectionString="127.0.0.1:6379,ssl=false"
     throwOnError="true"
     retryTimeoutInMilliseconds="5000"
     loggingClassName="Microsoft.Web.Redis.RedisSessionStateProviderLogging, Microsoft.Web.RedisSessionStateProvider" />
  1. 打开Windows事件查看器,在应用程序日志里查找来自RedisSessionStateProvider的错误信息——这能帮你精准定位是连接失败、权限问题还是序列化错误导致的会话创建失败

按照这个顺序一步步试,应该能解决重定向循环的问题——大概率是配置不兼容或者依赖冲突导致会话创建失败,进而触发页面的重定向逻辑(比如未登录/会话失效跳转)形成循环。

火山引擎 最新活动