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

ASP.NET MVC自定义认证时Session未配置异常的解决方法

解决方案

1. 完整配置Session服务

你遇到的异常核心原因是Session配置不完整——仅添加app.UseSession()还不够,必须先在服务注册阶段完成Session的初始化,且配置顺序有严格要求:

在Startup.cs的ConfigureServices方法中注册Session服务:

public void ConfigureServices(IServiceCollection services)
{
    // 注册Session并配置基础参数
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(30); // Session过期时间
        options.Cookie.HttpOnly = true; // 防止前端JS读取Session Cookie,提升安全性
        options.Cookie.IsEssential = true; // 标记Cookie为必要,符合GDPR要求
    });

    // 注册MVC控制器服务
    services.AddControllersWithViews();
}

在Configure方法中启用Session(注意顺序):

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

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

    app.UseRouting();

    // 启用Session:必须放在UseRouting之后,UseAuthorization/UseEndpoints之前
    app.UseSession();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllerRoute(
            name: "default",
            pattern: "{controller=Home}/{action=Index}/{id?}");
    });
}

2. 修正Session检查代码

Session.Keys是ICollection<string>类型,直接调用Contains方法即可,原代码的泛型写法Contains<string>()是错误的:

// 修正后的认证检查代码
if (!HttpContext.Session.Keys.Contains("authentication"))
{
    return RedirectToAction("Login", "Account");
}

如果是在控制器类中编写代码,还可以直接使用基类的Session属性,无需写HttpContext.Session:

if (!Session.Keys.Contains("authentication"))
{
    return RedirectToAction("Login", "Account");
}

3. 补充:用户名存入Session的示例

登录验证通过后,将用户名存入Session:

// 登录成功后执行
Session.SetString("authentication", "当前登录用户名");

后续获取用户名可使用:

var currentUserName = Session.GetString("authentication");

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 10:40:28