Session

Startup.cs 文件中进行配置

public void ConfigureServices(IServiceCollection services)
{
    services.AddDistributedMemoryCache(); // 使用内存作为缓存存储 Session
    services.AddSession(options =>
    {
        options.IdleTimeout = TimeSpan.FromMinutes(30); // 设置 Session 的过期时间
        options.Cookie.HttpOnly = true; // 使 cookie 仅通过 HTTP 传输
        options.Cookie.IsEssential = true; // 在 GDPR 下使 cookie 必须
    });

    services.AddControllersWithViews(); // 或者 services.AddRazorPages();
}

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();

    app.UseSession(); // 使用 Session 中间件

    app.UseAuthorization();

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

在控制器中使用 Session

using Microsoft.AspNetCore.Http;
using Microsoft.AspNetCore.Mvc;

public class HomeController : Controller
{
    public IActionResult Index()
    {
        // 存储信息到 Session
        HttpContext.Session.SetString("UserName", "John Doe");

        // 读取 Session 中的信息
        string userName = HttpContext.Session.GetString("UserName");

        ViewBag.UserName = userName;
        return View();
    }
}

使用扩展方法
.NET Core 提供了方便的扩展方法来存储和检索不同类型的数据:

SetString(string key, string value)
GetString(string key)
SetInt32(string key, int value)
GetInt32(string key)
如果需要存储复杂对象,可以将其序列化为 JSON 字符串,然后使用 SetString 存储,再用 GetString 读取后反序列化。

// 存储复杂对象
var myObject = new MyClass { Property1 = "Value1", Property2 = 123 };
HttpContext.Session.SetString("MyObject", JsonConvert.SerializeObject(myObject));

// 读取复杂对象
var myObjectJson = HttpContext.Session.GetString("MyObject");
if (myObjectJson != null)
{
    var myObject = JsonConvert.DeserializeObject<MyClass>(myObjectJson);
}

注意事项
Session 的数据存储在服务器端,客户端只保存一个 Session ID 的 cookie。当用户首次访问应用程序时,服务器会生成一个唯一的 Session ID,并将这个 Session ID 存储在一个名为 .AspNetCore.Session 的 Cookie 中 这个 Cookie 会在后续的请求中自动发送到服务器,以便服务器识别用户的 Session。
默认情况下,Session 使用内存缓存存储数据。如果您的应用程序需要在多个服务器之间共享 Session,可以考虑使用分布式缓存(如 Redis 或 SQL Server)。Session 的实际数据(如字符串、整数、对象等)是存储在服务器端的内存中,或者存储在配置的分布式缓存(例如 Redis、SQL Server)中。
服务器使用从客户端发送的 Session ID 来查找并获取相应的 Session 数据。
这样,可以在 .NET Core 中使用 Session 来保持用户数据或其他会话相关的信息。

posted @   Josen_Earth  阅读(12)  评论(0编辑  收藏  举报
编辑推荐:
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
阅读排行:
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?
点击右上角即可分享
微信分享提示