ASP.NET Session
最后修改于 2025 年 4 月 3 日
在本文中,我们将探讨 ASP.NET 8 中的 Session 状态管理。Session 允许在多个 HTTP 请求中存储用户特定的数据。
ASP.NET Session 提供了一种在浏览会话期间持久化用户数据的方法。这对于在无状态的 HTTP 协议应用程序中维护状态至关重要。
基本定义
ASP.NET 中的 Session 是一种服务器端状态管理机制。它将用户浏览会话特定的数据存储在 Web 服务器上。
每个用户都有一个由 Session ID 标识的唯一会话。此 ID 通常存储在 Cookie 中,或者通过 URL 传递以实现无 Cookie 会话。
Session 数据默认存储在内存中,但可以配置为使用分布式缓存或数据库。它是用户特定临时数据的理想选择。
Session 状态为每个用户单独维护。数据将一直保留,直到会话过期或被显式放弃。
ASP.NET Session 示例
以下示例演示了 ASP.NET Core MVC 应用程序中基本的 Session 用法。
var builder = WebApplication.CreateBuilder(args);
// Add services to the container.
builder.Services.AddControllersWithViews();
// Add session support with configuration
builder.Services.AddSession(options =>
{
options.IdleTimeout = TimeSpan.FromMinutes(30);
options.Cookie.HttpOnly = true;
options.Cookie.IsEssential = true;
});
var app = builder.Build();
// Configure the HTTP request pipeline.
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseRouting();
app.UseAuthorization();
// Enable session middleware
app.UseSession();
app.MapControllerRoute(
name: "default",
pattern: "{controller=Home}/{action=Index}/{id?}");
app.Run();
这建立了一个具有 Session 支持的基本 ASP.NET MVC 应用程序。AddSession 方法配置了 Session 选项,例如超时时间。
using Microsoft.AspNetCore.Mvc;
public class SessionController : Controller
{
public IActionResult Index()
{
// Retrieve visit count from session or initialize
int visitCount = HttpContext.Session.GetInt32("VisitCount") ?? 0;
visitCount++;
// Store updated count in session
HttpContext.Session.SetInt32("VisitCount", visitCount);
// Store current timestamp
HttpContext.Session.SetString("LastVisit", DateTime.Now.ToString());
ViewBag.VisitCount = visitCount;
ViewBag.LastVisit = HttpContext.Session.GetString("LastVisit");
return View();
}
public IActionResult ClearSession()
{
HttpContext.Session.Clear();
return RedirectToAction("Index");
}
}
此控制器演示了基本的 Session 操作。Index 操作通过在 Session 中存储计数器来跟踪页面访问。
@{
ViewData["Title"] = "Session Demo";
}
<h2>Session Demo</h2>
<p>You have visited this page @ViewBag.VisitCount times.</p>
<p>Your last visit was at @ViewBag.LastVisit</p>
<a asp-action="ClearSession" class="btn btn-danger">Clear Session</a>
视图显示 Session 数据,并提供一个用于清除 Session 的按钮。Session 值通过由控制器填充的 ViewBag 访问。
此示例展示了基本的 Session 操作:存储和检索简单数据类型。Session 会在请求之间持续存在,直到被清除或过期。
来源
在本文中,我们探讨了 ASP.NET 8 中的 Session 状态管理。此强大功能能够在请求之间维护用户特定的数据。