在 ASP.NET Core 应用程序中,如果在 IIS 和其他 web 服务器上运行,Session 的行为可能会有所不同。在 IIS 上,如果您使用的是某些 StateServer / Redis 等数据存储,则会话数据将在 IIS 进程之外存储,并且清除会话时需要使用 IHttpContextAccessor 对象。
因此,对于 IIS 应该使用以下代码:
public class HomeController : Controller
{
private readonly IHttpContextAccessor _httpContextAccessor;
public HomeController(IHttpContextAccessor httpContextAccessor)
{
_httpContextAccessor = httpContextAccessor;
}
public IActionResult ClearSession()
{
_httpContextAccessor.HttpContext.Session.Clear();
_httpContextAccessor.HttpContext.Session.CommitAsync().Wait();
return RedirectToAction("Index", "Home");
}
}
在上述代码中,首先注入一个 IHttpContextAccessor 对象,然后使用该对象进行 Session 的清除及提交操作。使用 CommitAsync() 方法将清除的操作提交到 Session 数据库中。