.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 @ 2019-04-09 19:04  小世界的野孩子  阅读(8218)  评论(0编辑  收藏  举报
回到顶部