在 .NET Core 中使用Session和 Cookie

作者:微信公众号:【架构师老卢】
9-17 18:19
139

管理用户状态对于创建无缝的交互式用户体验至关重要。ASP.NET Core 提供了强大的机制,用于通过会话和 Cookie 处理用户状态。本文将指导您了解 ASP.NET Core 应用程序中会话和 Cookie 的概念和实际实现。

SessionCookie 都是用于在多个请求中保留用户数据的机制,但它们在数据存储的位置和方式上有所不同。

  • Cookie:
  • 存储在用户浏览器的客户端。
  • 大小有限(通常约为 4KB)。
  • 可以跨会话保留,这意味着即使在浏览器关闭并重新打开后也可以保留它们。
  • 适用于存储少量需要跨会话保留的非敏感数据。
  • Session:
  • 存储在服务器端。
  • 通常与存储在客户端上的 Cookie 中的唯一会话 ID 相关联。
  • 在会话超时或用户关闭浏览器时过期(除非另有配置)。
  • 适用于存储更广泛和敏感的数据,这些数据只需要在单个会话期间持续存在。

2. 在 ASP.NET Core 中设置会话

要在 ASP.NET Core 应用程序中使用会话,请执行以下步骤:

第 1 步:安装所需的软件包

如果您尚未准备好,请确保您的项目具有会话所需的包。可以通过 NuGet 添加包。Microsoft.AspNetCore.Session

dotnet add package Microsoft.AspNetCore.Session

第 2 步:配置中间件

你需要通过在 和 方法中添加会话中间件来在文件中启用会话管理。Startup.csConfigureServicesConfigure

public void ConfigureServices(IServiceCollection services)  
{  
    services.AddDistributedMemoryCache();  
    services.AddSession(options =>  
    {  
        options.IdleTimeout = TimeSpan.FromMinutes(30); // Set session timeout  
        options.Cookie.HttpOnly = true; // Ensures the session cookie is accessible only by the server  
        options.Cookie.IsEssential = true; // Required for GDPR compliance  
    });  
    services.AddControllersWithViews();  
}  
  
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(); // Add the session middleware  
  
    app.UseAuthorization();  
  
    app.UseEndpoints(endpoints =>  
    {  
        endpoints.MapControllerRoute(  
            name: "default",  
            pattern: "{controller=Home}/{action=Index}/{id?}");  
    });  
}

步骤 3:在 Session 中存储和检索数据

您可以使用属性从会话中存储和检索数据。HttpContext.Session

// Storing data in session  
HttpContext.Session.SetString("Username", "JohnDoe");  
// Retrieving data from session  
var username = HttpContext.Session.GetString("Username");

3. 在 ASP.NET Core 中使用 Cookie

Cookie 比会话更灵活,但需要小心处理,尤其是在处理敏感数据时。

第 1 步:添加 Cookie

要添加 Cookie,您可以使用该方法。HttpContext.Response.Cookies.Append

// Adding a cookie  
HttpContext.Response.Cookies.Append("Username", "JohnDoe", new CookieOptions  
{  
    Expires = DateTimeOffset.UtcNow.AddMinutes(30),  
    HttpOnly = true, // Accessible only by the server  
    IsEssential = true // Required for GDPR compliance  
});

第 2 步:检索 Cookie

要检索 Cookie,请使用属性。HttpContext.Request.Cookies

// Retrieving a cookie  
string username = HttpContext.Request.Cookies["Username"];

第 3 步:删除 Cookie

要删除 Cookie,只需用过期的 Cookie 覆盖它即可。

// Deleting a cookie  
HttpContext.Response.Cookies.Delete("Username");

4. 最佳实践

  • 安全: 始终确保将 Cookie 标记为以防止客户端脚本访问。考虑使用 and 属性来进一步增强安全性。HttpOnlySecureSameSite
  • 会话管理: 请注意会话超时及其对用户体验的影响。会话数据应保持在最少,并应避免使用敏感信息。
  • GDPR 合规性: 如果您的应用程序为欧洲用户提供服务,请确保您对 Cookie 的使用符合 GDPR 法规。这可能涉及向用户提供有关 cookie 使用的明确信息并获得他们的同意。

Session和 Cookie 是管理 Web 应用程序中用户状态的重要工具。虽然会话非常适合在用户访问期间进行服务器端状态管理,但 Cookie 提供了一种在客户端保留少量数据的方法。了解何时以及如何有效地使用每个应用程序对于构建安全且用户友好的 ASP.NET Core 应用程序至关重要。

将这些技术合并到您的项目中,以增强您管理用户会话和状态的方式。

相关留言评论
昵称:
邮箱:
阅读排行