导读:本期聚焦于小伙伴创作的《C#如何使用Cookie?ASP.NET Core中读写与加密Cookie的基础方法是什么》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《C#如何使用Cookie?ASP.NET Core中读写与加密Cookie的基础方法是什么》有用,将其分享出去将是对创作者最好的鼓励。

在ASP.NET Core应用中,Cookie是存储在客户端浏览器中的小型数据片段,常用于维持用户会话、记录用户偏好设置等场景。掌握Cookie的读写和加密操作是C#后端开发的基础技能,下面详细介绍具体的实现方式。

C#如何使用Cookie?ASP.NET Core中读写与加密Cookie的基础方法是什么

基础环境准备

首先需要在ASP.NET Core项目中引入必要的基础依赖,默认创建的项目已经包含了Microsoft.AspNetCore.Http命名空间,该命名空间提供了操作Cookie的核心接口。如果是控制台程序需要操作Cookie,还需要额外引入相关HTTP上下文的模拟依赖,本文基于常规的ASP.NET Core Web应用展开说明。

写入Cookie

写入Cookie需要通过当前请求的HttpContext对象的Response.Cookies属性实现,核心方法是Append,可以指定Cookie的名称、值、过期时间等参数。

基础写入示例

以下代码演示了在控制器中写入一个简单的用户ID Cookie:

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

namespace CookieDemo.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class CookieController : ControllerBase
    {
        [HttpPost("write")]
        public IActionResult WriteCookie()
        {
            // 定义Cookie的名称和值
            string cookieName = "userId";
            string cookieValue = "10001";
            
            // 设置Cookie选项,包括过期时间
            CookieOptions options = new CookieOptions
            {
                // 过期时间为7天后
                Expires = DateTime.Now.AddDays(7),
                // 是否仅通过HTTP传输,避免JavaScript读取
                HttpOnly = true,
                // 是否仅在HTTPS下传输
                Secure = false
            };
            
            // 写入Cookie
            Response.Cookies.Append(cookieName, cookieValue, options);
            
            return Ok("Cookie写入成功");
        }
    }
}

读取Cookie

读取Cookie需要通过HttpContextRequest.Cookies属性,它是一个键值对集合,通过Cookie名称即可获取对应的值。

基础读取示例

以下代码演示了读取刚才写入的userId Cookie:

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

namespace CookieDemo.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class CookieController : ControllerBase
    {
        [HttpGet("read")]
        public IActionResult ReadCookie()
        {
            string cookieName = "userId";
            // 尝试获取Cookie值
            string cookieValue = Request.Cookies[cookieName];
            
            if (string.IsNullOrEmpty(cookieValue))
            {
                return NotFound("未找到对应的Cookie");
            }
            
            return Ok($"读取到的Cookie值:{cookieValue}");
        }
    }
}

加密Cookie

直接存储明文Cookie存在安全风险,比如用户ID被篡改可能导致越权问题,因此需要对Cookie值进行加密。ASP.NET Core提供了内置的数据保护接口IDataProtector来实现加密和解密操作。

配置数据保护服务

首先需要在Program.cs中注册数据保护服务,默认的Web应用已经包含了基础的服务注册,无需额外操作。如果需要自定义保护策略,可以额外配置:

var builder = WebApplication.CreateBuilder(args);

// 添加数据保护服务,默认已包含,这里仅为示意
builder.Services.AddDataProtection();

builder.Services.AddControllers();

var app = builder.Build();

app.UseAuthorization();
app.MapControllers();

app.Run();

加密写入Cookie

以下代码演示了使用数据保护接口加密Cookie值后写入:

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

namespace CookieDemo.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class CookieController : ControllerBase
    {
        private readonly IDataProtector _protector;
        
        // 通过依赖注入获取IDataProtectionProvider,创建保护器
        public CookieController(IDataProtectionProvider provider)
        {
            // 指定保护器的用途标识,不同标识加密结果不同
            _protector = provider.CreateProtector("CookieDemo.UserId");
        }
        
        [HttpPost("write-encrypt")]
        public IActionResult WriteEncryptCookie()
        {
            string cookieName = "encryptUserId";
            string originalValue = "10001";
            
            // 加密原始值
            string encryptedValue = _protector.Protect(originalValue);
            
            CookieOptions options = new CookieOptions
            {
                Expires = DateTime.Now.AddDays(7),
                HttpOnly = true,
                Secure = false
            };
            
            Response.Cookies.Append(cookieName, encryptedValue, options);
            
            return Ok("加密Cookie写入成功");
        }
    }
}

解密读取Cookie

读取加密后的Cookie时,需要使用同一个用途标识创建的保护器进行解密,否则会解密失败。

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

namespace CookieDemo.Controllers
{
    [ApiController]
    [Route("api/[controller]")]
    public class CookieController : ControllerBase
    {
        private readonly IDataProtector _protector;
        
        public CookieController(IDataProtectionProvider provider)
        {
            _protector = provider.CreateProtector("CookieDemo.UserId");
        }
        
        [HttpGet("read-encrypt")]
        public IActionResult ReadEncryptCookie()
        {
            string cookieName = "encryptUserId";
            string encryptedValue = Request.Cookies[cookieName];
            
            if (string.IsNullOrEmpty(encryptedValue))
            {
                return NotFound("未找到加密Cookie");
            }
            
            try
            {
                // 解密Cookie值
                string originalValue = _protector.Unprotect(encryptedValue);
                return Ok($"解密后的Cookie值:{originalValue}");
            }
            catch (Exception ex)
            {
                return BadRequest($"Cookie解密失败:{ex.Message}");
            }
        }
    }
}

注意事项

  • Cookie的大小限制一般为4KB左右,不要存储过大的数据。
  • 涉及用户敏感信息的Cookie建议开启HttpOnlySecure属性,提升安全性。
  • 加密Cookie时,保护器的用途标识需要保持一致,否则无法正确解密。
  • 如果应用部署在多台服务器上,需要配置数据保护的持久化和共享策略,否则不同服务器的加密结果无法互相解密。

C#ASP.NET_CoreCookie加密Cookie修改时间:2026-06-15 16:24:32

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。