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

如何在ASP.NET MVC及ASP.NET Core中管理Session?ASP.NET Core MVC实现咨询

ASP.NET MVC 与 ASP.NET Core Session 管理实现方案

1. ASP.NET MVC(.NET Framework 版本)Session 管理

该版本的Session默认已启用,无需额外配置,直接在控制器中通过Session对象操作即可:

  • 存储值:Session["CustomKey"] = "存储内容";
  • 读取值:var value = Session["CustomKey"]?.ToString();
  • 删除指定键:Session.Remove("CustomKey");
  • 清空所有Session:Session.Clear();
  • 配置过期时间:在Web.config的<system.web>节点下添加配置,单位为分钟:
    <sessionState timeout="30" />
    

2. ASP.NET Core MVC Session 实现

ASP.NET Core默认未启用Session,需要手动完成配置后使用,步骤如下:

步骤1:引入依赖

  • .NET 6及以上版本:框架已内置Session组件,无需额外安装NuGet包
  • .NET 5及更早版本:需要安装NuGet包Microsoft.AspNetCore.Session

步骤2:注册服务与配置中间件

注意:中间件顺序不能乱,UseSession必须放在路由中间件之后、授权中间件和端点映射之前,否则Session不会生效

.NET 6+ 版本(Program.cs)配置示例:

var builder = WebApplication.CreateBuilder(args);

// 注册Session服务
builder.Services.AddSession(opt =>
{
    // 设置Session空闲过期时间,这里设为30分钟
    opt.IdleTimeout = TimeSpan.FromMinutes(30);
    // Session对应的Cookie设置,HttpOnly防止前端JS读取,避免XSS风险
    opt.Cookie.HttpOnly = true;
    opt.Cookie.IsEssential = true;
});

// 注册MVC服务
builder.Services.AddControllersWithViews();

var app = builder.Build();

// 按顺序添加中间件
app.UseRouting();
// 必须放在路由之后,授权之前
app.UseSession();
app.UseAuthorization();

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

app.Run();

.NET 5及更早版本(Startup.cs)配置示例:

public class Startup
{
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddSession(opt =>
        {
            opt.IdleTimeout = TimeSpan.FromMinutes(30);
            opt.Cookie.HttpOnly = true;
            opt.Cookie.IsEssential = true;
        });
        services.AddControllersWithViews();
    }

    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseRouting();
        app.UseSession();
        app.UseAuthorization();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllerRoute(
                name: "default",
                pattern: "{controller=Home}/{action=Index}/{id?}");
        });
    }
}

步骤3:控制器中操作Session

ASP.NET Core Session原生仅支持存储int、string、byte[]三类数据,存储复杂对象需要先序列化为JSON字符串。
基础操作示例:

// 存储字符串
HttpContext.Session.SetString("UserName", "张三");
// 存储整型
HttpContext.Session.SetInt32("UserId", 10001);
// 读取数据
var userName = HttpContext.Session.GetString("UserName");
var userId = HttpContext.Session.GetInt32("UserId");
// 删除指定键
HttpContext.Session.Remove("UserName");
// 清空所有Session
HttpContext.Session.Clear();

存储复杂对象示例:

// 存对象
var userInfo = new User { Id = 1, Name = "张三", Phone = "13xxxxxxxxx" };
HttpContext.Session.SetString("UserInfo", JsonSerializer.Serialize(userInfo));

// 取对象
var userJson = HttpContext.Session.GetString("UserInfo");
if (!string.IsNullOrEmpty(userJson))
{
    var userInfo = JsonSerializer.Deserialize<User>(userJson);
}

步骤4:视图中读取Session

在Razor视图中可以直接通过Context访问Session:

@{
    var userName = Context.Session.GetString("UserName");
}
<p>当前登录用户:@userName</p>

注意事项

  • 默认Session存储在服务端内存中,分布式部署场景下需要配置分布式Session,将数据存储到Redis、SQL Server等公共存储介质中,避免多实例之间Session不同步
  • 不要在Session中存储过大体积的数据,避免占用过多服务端内存影响性能

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 00:06:02