前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >.NetCore 使用Cookie

.NetCore 使用Cookie

作者头像
小世界的野孩子
发布2019-09-11 14:44:12
1.3K0
发布2019-09-11 14:44:12
举报
文章被收录于专栏:.Net、.Net Core 、Docker

1、首先我们在Startup下面的ConfigureServices中注册授权认证服务以及AddCookie

代码语言:javascript
复制
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
            .AddCookie(opt => { opt.LoginPath = new PathString("/Home/Index/"); });

2、然后可以在需要使用cookie的地方添加

代码语言:javascript
复制
HttpContext.Response.Cookies.Append("getCookie", "setCookieValue");

3、然后我们需要使用的时候直接取出cookie的值

代码语言:javascript
复制
 var getCookie = "";
   HttpContext.Request.Cookies.TryGetValue("getCookie", out getCookie);

4、到这里都是可以成功的,然后我们清除浏览器缓存之后再来尝试这样来处理cookie。发现Append和TryGetValue都是没有值的。此时内心无比惆怅!

令我百思不得其解,Google了一些资料,发现一个解决方案,和Configure中的文件有关。。

原因是AspNetCore2.1 支持了2018年5月25号出台的 GDPR规范,该规范认为 cookie是用户的隐私数据,如果要使用的话,必须征得用户同意.我们可以把Configure中的

代码语言:javascript
复制
app.UseCookiePolicy();

这一行代码注释掉。然后我们再次试试,发现存取cookie都是正常的了。一切都变的那么舒适了...

在实际使用中我们可以对cookie做一定的整合,我们首先创建一个CookieHelper

代码语言:javascript
复制
 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;
        }
    }

然后我们就可以在我们需要的控制器里面去继承

代码语言:javascript
复制
  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的存取了

参考https://docs.microsoft.com/en-us/dotnet/api/microsoft.aspnetcore.http.iresponsecookies?view=aspnetcore-2.2

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019-04-09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档