欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

.Net Core下Cookie的使用

程序员文章站 2022-06-11 22:28:35
...

1.Cookie的使用

如果在Controller里面直接使用

HttpContext.Response.Cookies.Append("user", "小明");//写入
HttpContext.Request.Cookies.TryGetValue("user", out string user);//读取
HttpContext.Response.Cookies.Delete("user");//删除

如果不在Controller,如在类库中使用,自定义CookieHelper等类库对Cookie进行操作的话,那直接使用HttpContext.Response.Cookies等相关方法是操作不了的

需要使用IHttpContextAccessor来传入HttpContext才能使用,注意需引入using Microsoft.AspNetCore.Http

如自定义的类CookieHelper

这里就实现了AddCookie方法来示例一下

    public class CookieHelper : ICookieHelper {
        private readonly IHttpContextAccessor _HttpContextAccessor;
        public CookieHelper(IHttpContextAccessor httpContextAccessor) {
            _HttpContextAccessor = httpContextAccessor;
        }
        public void AddCookie(string key, string value) {
            _HttpContextAccessor.HttpContext.Response.Cookies.Append(key, value, new CookieOptions() { IsEssential = true });//IsEssential = true 是否强制存储cookie
        }

        public bool ContainsKey(string key) {
            throw new NotImplementedException();
        }

        public void Delete(string key) {
            throw new NotImplementedException();
        }

        public string GetCookie(string key) {
            throw new NotImplementedException();
        }

        public void TryDelete(string key) {
            throw new NotImplementedException();
        }

        public void UpdateCookie(string key, string value) {
            throw new NotImplementedException();
        }
    }

在Startup中的ConfigureServices方法中需进行配置,IOC的注册

            //注册
            services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
            services.AddSingleton<ICookieHelper, CookieHelper>();

这样就可以在CookieHelper中拿到IHttpContextAccessor,然后通过他拿到HttpContext对Cookie来操作

2.Cookie如果遇到写入不了的处理

默认MVC程序中的Startup中的ConfigureServices中会对Cookie进行配置如

            services.Configure<CookiePolicyOptions>(options => {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;GDPR规范关闭 如果不关闭可能会cookie写入不了 在本机调试的时候无此问题,发布的时候就会碰到
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

其中的options.CheckConsentNeeded = context => true;如果为true就是要按照GDPR规则来

《通用数据保护条例》(General Data Protection Regulation,简称GDPR)为欧洲联盟于2018年5月25日出台的条例,前身是欧盟在1995年制定的《计算机数据保护法》。

这样你只要将options.CheckConsentNeeded = context => false;修改下就行了

或者在Startup的Configure方法中

            //app.UseCookiePolicy();//使用cookie策略 与上面services.Configure<CookiePolicyOptions>对应 所以cookie写入不了的话可以将上面的策略options.CheckConsentNeeded = context => true; 或此处注释掉不使用此中间件

将app.UseCookiePolicy();此代码注释掉

因为在ConfigureServices中对Cookie的策略进行配置,需要在Configure中app.UseCookiePolicy()使用才可以。所以两个地方你修改其中之一就行了,这样就可以写入了。