You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ASP.NET Core部署IIS后Session.Clear()无法彻底清除会话

ASP.NET Core MVC会话登出后自动恢复问题

开发环境

  • 技术栈:ASP.NET Core MVC(C# + HTML Razor)

问题描述

本地Visual Studio调试时,调用HttpContext.Session.Clear()能正常清除所有会话变量;但部署到IIS后,点击登出按钮时会话变量确实会被清除,但约10-12秒后会自动恢复,用户信息重新显示,网站判定用户仍处于登录状态。偶尔会话能保持清除状态,但多数情况下都会出现该异常。

相关代码

Home控制器登出方法

[Route("logout")]
[HttpGet]
public IActionResult Logout()
{
    HttpContext.Session.Clear();
    return RedirectToAction("Index");
}

Razor视图中的登出链接

<a class="nav-link text-dark" asp-controller="Home" asp-action="Logout"><b>Logout</b></a>

Session扩展类(用于存储对象)

using Newtonsoft.Json;
#nullable enable
namespace Microsoft.AspNetCore.Http
{
    public static class SessionExtensions
    {
        public static void SetObject(this ISession session, string key, object value)
        {
            session.SetString(key, JsonConvert.SerializeObject(value));
        }

        public static T GetObject<T>(this ISession session, string key)
        {
            var value = session.GetString(key);
            return value == null ? default(T) : JsonConvert.DeserializeObject<T>(value);
        }
    }
}

补充说明:通过该扩展类将用户信息以Dictionary形式存入Session,仅在登录时从数据库获取一次,后续通过HttpContextAccessor快速获取权限,避免重复查库。

已尝试的解决方案

  • 远程调试IIS部署实例:登出后会话保持清除状态约10-12秒,之后信息自动恢复
  • 本地调试:登出后会话永久保持清除状态
  • 清除客户端浏览器Cookie
  • 重启IIS服务器及站点
  • 删除IIS站点重新部署,分别尝试Debug和Release发布配置,问题无变化
  • 更新所有NuGet包,升级项目至.NET 7.0框架

后续排查补充信息

  1. Program.cs中配置的会话空闲超时(Idle Timeout)功能正常,能按时清除会话
  2. 尝试手动将每个会话变量设为Null,无法彻底解决问题,仍存在会话变量设置不生效或仅临时有效的随机异常
  3. 移除调试页面中的Ping代码后,所有问题解决:
    调试页面中的异常代码:
    @{var IPAddress = HttpContextAccessor.HttpContext.Request.HttpContext.Connection.RemoteIpAddress.ToString();
    
    Ping pingSender = new Ping();
    PingReply reply1 = pingSender.Send(IPAddress);
    PingReply reply2 = pingSender.Send(IPAddress);
    PingReply reply3 = pingSender.Send(IPAddress);
    
    long[] ReplyTimes = { reply1.RoundtripTime, reply2.RoundtripTime, reply3.RoundtripTime};}
    @ReplyTimes
    
    进一步观察发现:会话更新后变更会被保存,但10秒后会恢复原状;部分场景下会反复在新旧会话值间切换;即使未加载该调试页面,登出后会话仍会在10秒后恢复;已确认全程仅存在一个会话Cookie。目前无法解释这段Ping代码为何会引发会话异常。

内容的提问来源于stack exchange,提问作者Taylor Gates

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 03:05:40