ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理)

前言

时间一晃 ASP.NET Core已经迭代到2.1版本了.html

火烧眉毛的的下载了最新的版本,而后生成了一个模版项目来试试水.前端

...而后就碰到问题了... 我发现..cookie居然存不进去了..(怨念+100)浏览器

找了各类资料,无果  最后无奈只得麻烦善友老师..老师回了一句GDPR安全

虽然一头雾水,可是仍是去百度了一发.终于找到缘由..(E文好的能够自行跳转,很差的..就往下看)cookie

官方文档:https://docs.microsoft.com/en-us/aspnet/core/security/gdpr?view=aspnetcore-2.1asp.net

 

正文

 

是由于从ASP.NET Core2.1开始,咱们的ASP.NET开始能够支持GDPR规范了,(并且顺带他生成的模版,直接就帮你开启了.)post

那么什么是GDPR规范呢?网站

百度百科以下:ui

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

注意出台时间..2018年5月25号..我去啊 才出来就支持了..还真是与时俱进..

那么这个东西和存不进Cookie有什么关系呢?

由于这个条例把cookie限制为用户隐私数据,若是要使用的话,必须征得用户赞成.

并且在ASP.NET Core2.1的官方项目模板在建立的Razor Pages和MVC项目的时候,会自动帮你添加这个GDPR协议的支持.so..就存不进去了..

大概在模版中帮咱们生成了以下内容:

  • 在Startup设置了 CookiePolicyOptionsUseCookiePolicy
  • 添加_CookieConsentPartial.cshtml 局部视图
  • 在根目录/ Privacy.cshtml主页/ Privacy.cshtml视图提供了一个页面,让你详细说明你的网站的隐私政策。上面的_CookieConsentPartial.cshtml文件会生成一个连接到这个页面。
  • 对于使用我的用户账户建立的应用程序,管理页面提供了下载和删除我的用户数据的连接

咱们来看看它添加的内容(这里由于没用到UseCookiePolicy,因此咱们暂且不论).

在Startup中的ConfigureServices方法,咱们找到设置CookiePolicyOptions的代码以下:

            services.Configure<CookiePolicyOptions>(options =>
            {
                // This lambda determines whether user consent for non-essential cookies 
                // is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

其实,到这里,咱们基本就已经解决了cookie存不进去的问题..咱们能够看到他默认设置CheckConsentNeeded 为true了.咱们只须要设置为false.或者删除这一段代码,那么咱们的 cookie就能正常的使用了

可是,既然欧盟出台了这个规范,虽然管不到中国..估计早晚要全球推广或者你作的是欧盟国际的项目,就必然要支持..因此咱们继续往下看..

 

咱们找到 _CookieConsentPartial.cshtml局部视图

在如图位置:

 

咱们打开,会发现里面是一句提示,有赞成和了解更多的一些选项,咱们翻译一下,运行项目,效果以下:

不过这时候你要是满心欢喜的点了赞成..那就须要多看看JS了..咱们会发现,这个赞成所对应的JS里面的相关代码并无写完..

那咱们本身把他补充完整.

首先咱们添加控制器方法以下:

 public bool OkCookie()
 {
    var consentFeature = HttpContext.Features.Get<ITrackingConsentFeature>();
    consentFeature.GrantConsent();
    return true;
 }

也就是让该用户赞成使用cookie并作上标记.(原理其实就是在cookie中添加了一个标记,若是有这个标记就是赞成了.能够自行查看源码)

而后咱们添加JS脚本以下:

        (function () {
            document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
                document.cookie = el.target.dataset.cookieString;
               // document.querySelector("#cookieConsent").classList.add("hidden");
                $.post("@Url.Action("OkCookie","Home")", "", function () {
                    document.querySelector("#cookieConsent").classList.add("hidden");
                }
                )
            }, false);
        })();

访问咱们刚刚的方法,并隐藏这个提示.

这时候咱们点击赞成,会发现cookie中多出一个标记 以下:

而后咱们在存储咱们的cookie就能够成功了.

效果以下:

 原本,文章到此就结束了..可是其实关于cookie.我问了一圈周边同事,感受你们都是不甚了解的样子..

下面也就顺便说一说ASP.NET Core 中关于cookie的使用.

 

 

ASP.NET Core 关于Cookie的一些使用

1.存储cookie.代码以下:

Guid date = Guid.NewGuid();
Response.Cookies.Append("UserName666", date.ToString());

2.设置cookie属性

与以前的asp.net 不一样,设置cookie的详细属性值,不在是new一个HttpCookie对象了..

而是在Append的时候多了一个参数,为CookieOptions

使用方法以下:

 Response.Cookies.Append("8888", "999999", new CookieOptions()
 {
  HttpOnly = true,
  Secure = true
 });

几个经常使用的cookie属性解释一下:

2.1  HttpOnly 

   设置为后台只读模式,前端没法经过JS来获取cookie值,能够有效的防止XXS攻击

2.2 Secure 

   采用安全模式来传递cookie,若是设置为true,就是当你的网站开启了SSL(就是https),的时候,这个cookie值才会被传递

2.3 MaxAge

 cookie的有效毫秒数,若是设置为负值的话,则为浏览器进程Cookie(内存中保存),关闭浏览器就失效;若是设置为0,则当即删除该Cookie。

2.4 IsEssential

是否强制存储cookie,注意,这里的强制 是针对于上面所讲的内容的..也就是当用户不一样意使用cookie的时候,你也能够经过设置这个属性为true把cookie强制存储.

相关文章
相关标签/搜索