如何在 C# ASP.NET Core 中启用会话?

ASP.NET Core 是一个跨平台、高性能的开源框架。在 ASP.NET Core 中,我们可以通过会话来存储用户的数据,例如用户的登录信息、购物车等。本文将会介绍如何在 C# ASP.NET Core 中启用会话。

1. 前言

在启用会话之前,我们需要先了解 Cookies。Cookies 是一种储存在用户计算机中的小型文本文件,它可以在浏览器和服务器之间传递信息。使用 Cookies 可以跟踪用户的状态,例如登录状态。

2. 启用会话

在 ASP.NET Core 中启用会话非常简单,只需要在 Startup.cs 文件中配置即可。

首先,我们需要在 ConfigureServices 方法中添加以下代码:

services.AddSession(options =>

{

options.IdleTimeout = TimeSpan.FromMinutes(30);

options.Cookie.HttpOnly = true;

options.Cookie.IsEssential = true;

});

这里我们设置了会话的超时时间为 30 分钟,同时设置了 Cookie 的 HttpOnly 属性为 true,这可以防止恶意代码对 Cookie 进行访问。另外,我们还将 Cookie 的 IsEssential 属性设置为 true,这可以让 ASP.NET Core 应用程序在启动时就加载会话中的数据,即使用户没有激活会话(例如,在浏览器中禁用了 Cookies)。

接下来,我们需要在 Configure 方法中添加以下代码:

app.UseSession();

这将把会话中间件添加到应用程序的管道中。顺便说一下,在 UseSession 方法之前,我们可以将身份验证、授权和其他中间件添加到管道中。

3. 使用会话

启用会话之后,我们可以使用 Session 对象存储数据。在 ASP.NET Core 中,Session 对象是通过 IHttpContextAccessor 接口访问的。在控制器中注入 IHttpContextAccessor 接口,就可以使用 Session 对象了。

下面是一个简单的示例,我们可以在 Index 方法中使用 Session 对象存储和检索用户的 FavoriteColor 属性。

public class HomeController : Controller

{

private readonly IHttpContextAccessor _httpContextAccessor;

public HomeController(IHttpContextAccessor httpContextAccessor)

{

_httpContextAccessor = httpContextAccessor;

}

public IActionResult Index()

{

HttpContext.Session.SetString("FavoriteColor", "Blue");

var favoriteColor = HttpContext.Session.GetString("FavoriteColor");

return Content($"Favorite color: {favoriteColor}");

}

}

3.1 设置会话超时时间

在 ConfigureServices 方法中,我们可以设置会话的超时时间。当会话超过超时时间时,ASP.NET Core 将会话标记为过期状态。可以通过以下代码设置会话的超时时间:

services.AddSession(options =>

{

options.IdleTimeout = TimeSpan.FromMinutes(30);

});

3.2 检查会话是否可用

有时候我们需要检查浏览器是否启用了会话,可以使用以下代码进行检查:

public class HomeController : Controller

{

private readonly IHttpContextAccessor _httpContextAccessor;

public HomeController(IHttpContextAccessor httpContextAccessor)

{

_httpContextAccessor = httpContextAccessor;

}

public IActionResult Index()

{

if (HttpContext.Session == null)

return Content("Session not available");

// ...

return View();

}

}

3.3 删除会话

如果我们需要删除会话,可以通过以下代码实现:

public class HomeController : Controller

{

private readonly IHttpContextAccessor _httpContextAccessor;

public HomeController(IHttpContextAccessor httpContextAccessor)

{

_httpContextAccessor = httpContextAccessor;

}

public IActionResult Logout()

{

HttpContext.Session.Clear();

HttpContext.Session.Remove("FavoriteColor");

return RedirectToAction("Index");

}

}

4. 总结

在 ASP.NET Core 中启用会话非常简单,只需要在 ConfigureServices 方法中添加一些代码,然后在 Configure 方法中添加会话中间件即可。一旦启用会话,我们就可以在控制器中注入 IHttpContextAccessor 接口,并使用 Session 对象来存储和检索数据。

参考文献

ASP.NET Core app state

ASP.NET Core session state

后端开发标签