.NetCore 使用Cookie

1、首先我们在Startup下面的ConfigureServices中注册授权认证服务以及AddCookie
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(opt => { opt.LoginPath = new PathString("/Home/Index/"); });

 

2、然后可以在需要使用cookie的地方添加
HttpContext.Response.Cookies.Append("getCookie", "setCookieValue");

 

3、然后我们需要使用的时候直接取出cookie的值
  
 var getCookie = "";
   HttpContext.Request.Cookies.TryGetValue("getCookie", out getCookie);

 

4、到这里都是可以成功的,然后我们清除浏览器缓存之后再来尝试这样来处理cookie。发现Append和TryGetValue都是没有值的。此时内心无比惆怅!
令我百思不得其解,Google了一些资料,发现一个解决方案,和Configure中的文件有关。。
原因是AspNetCore2.1 支持了2018年5月25号出台的 GDPR规范,该规范认为 cookie是用户的隐私数据,如果要使用的话,必须征得用户同意.我们可以把Configure中的
app.UseCookiePolicy();

 

这一行代码注释掉。然后我们再次试试,发现存取cookie都是正常的了。一切都变的那么舒适了...
在实际使用中我们可以对cookie做一定的整合,我们首先创建一个CookieHelper
  
复制代码
 public class CookieHelper:Controller
      {
        /// <summary>
        /// 添加cookie缓存不设置过期时间
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        public void AddCookie(string key, string value)
        {
            try
            {
                HttpContext.Response.Cookies.Append(key, value);
            }
            catch (Exception ex)
            {
                throw;
            }
        }
        /// <summary>
        /// 添加cookie缓存设置过期时间
        /// </summary>
        /// <param name="key"></param>
        /// <param name="value"></param>
        /// <param name="time"></param>
        public   void AddCookie(string key,string value,int time)
        {
            HttpContext.Response.Cookies.Append(key, value,new CookieOptions
            {
                Expires=DateTime.Now.AddMilliseconds(time)
            });
        }
        /// <summary>
        /// 删除cookie缓存
        /// </summary>
        /// <param name="key"></param>
        public void DeleteCookie(string key)
        {
            HttpContext.Response.Cookies.Delete(key);
        }
        /// <summary>
        /// 根据键获取对应的cookie
        /// </summary>
        /// <param name="key"></param>
        /// <returns></returns>
        public  string GetValue(string key)
        {
            var value = "";
                HttpContext.Request.Cookies.TryGetValue(key,out value);
            if (string.IsNullOrWhiteSpace(value))
            {
                value = string.Empty;
            }
            return value;
        }
    }
复制代码

 

然后我们就可以在我们需要的控制器里面去继承
  
复制代码
  public class HomeController : CookieHelper
    {
        public IActionResult Index()
        {
            AddCookie("getCookie", "这是一个测试存cookie");
            return View();
        }
    }
 
public class cookieController : CookieHelper
    {
       
        public IActionResult Index()
        {  
            ViewBag.cookie = GetValue("getCookie");
            return View();
        }
    }
复制代码

 

这样我们就完成了一次在.Net Core 中cookie的存取了
 
 

欢迎大家扫描下方二维码,和我一起学习更多的知识😊

 

  

posted @   小世界的野孩子  阅读(9399)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
回到顶部
点击右上角即可分享
微信分享提示