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

摘要:
view=aspnetcore-2.1正文是因为从ASP.NETCore2.1开始,我们的ASP.NET开始可以支持GDPR规范了,那么什么是GDPR规范呢?因为这个条例把cookie限制为用户隐私数据,如果要使用的话,必须征得用户同意.而且在ASP.NETCore2.1的官方项目模板在创建的RazorPages和MVC项目的时候,会自动帮你添加这个GDPR协议的支持.so..就存不进去了..大概在模版中帮我们生成了如下内容:在Startup设置了CookiePolicyOptions和UseCookiePolicy添加_CookieConsentPartial.cshtml局部视图。
前言

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

迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水.

...然后就碰到问题了... 我发现..cookie竟然存不进去了..(怨念+100)

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

虽然一头雾水,但是还是去百度了一发.终于找到原因..(E文好的可以自行跳转,不好的..就往下看)

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

正文

是因为从ASP.NET Core2.1开始,我们的ASP.NET开始可以支持GDPR规范了,(而且顺带他生成的模版,直接就帮你开启了.)

那么什么是GDPR规范呢?

百度百科如下:

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

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

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

因为这个条例把cookie限制为用户隐私数据,如果要使用的话,必须征得用户同意.

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

大概在模版中帮我们生成了如下内容:

  • 在Startup设置了CookiePolicyOptions和UseCookiePolicy
  • 添加_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局部视图

在如图位置:

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

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

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

不过这时候你要是满心欢喜的点了同意..那就需要多看看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中多出一个标记 如下:

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

然后我们在存储我们的cookie就可以成功了.

效果如下:

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

本来,文章到此就结束了..但是其实关于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.1HttpOnly

设置为后台只读模式,前端无法通过JS来获取cookie值,可以有效的防止XXS攻击

2.2Secure

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

2.3MaxAge

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

2.4IsEssential

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

作者:顾振印 出处:http://www.cnblogs.com/GuZhenYin/ 如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面

免责声明:文章转载自《ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理)》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇【转】在 ASP.NET Core 中使用 IHttpClientFactory 发出 HTTP 请求C# 枚举、字符串、值的相互转换下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Tornado 【简述】

前言 python 旗下,群英荟萃,豪杰并起。单是用于 web 开发的,就有 webpy、web2py、bottle、pyramid、zope2、flask、tornado、django 等等,不一而足。最近几年较为流行的,大概也就是flask、tornado 和 django 了。 关于以上各个 web 开发框架的性能比较,上网一搜,铺天盖地——这不是...

haproxy 配置详解

OPTION 选项: option httpclose :HAProxy会针对客户端的第一条请求的返回添加cookie并返回给客户端,客户端发送后续请求时会发送                              此cookie到HAProxy,HAProxy会针对此cookie分发到上次处理此请求的服务器上,如果服务器不能忽略           ...

http原理

一、HTTP服务介绍 1 简述用户访网站流程 a 进行域名信息的DNS解析   dig +trace 获得www.oldboyedu.com  ip地址信息 b 进行与网站服务器建立连接,tcp三次握手过程 (syn ack SEQ ACK/状态转换 closed listen syn_sent  syn_rcvd established ) c 和网站...

CAS实现SSO单点登录原理

一、不落俗套的开始 1、背景介绍 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。 CAS框架:CAS(Central Authentication Service)是实现SSO单点登录的框架。 2、盗一张学习CAS绝大多都看过的图以及执行部分分析 注:已分不清原创,此...

缓冲区溢出保护机制——Linux

缓冲区溢出保护机制 Linux canary(栈保护) 栈溢出保护是一种缓冲区溢出攻击的缓解手段,当函数存在缓冲区溢出攻击漏洞时,攻击者可以覆盖栈上的返回地址来让shellcode能够得到执行。 当启用栈保护后,函数开始执行的时候会先往栈里插入cookie信息,该cookie往往放置在ebp/rbp的正上方,当函数真正返回的时候会验证cookie信息是否合...

Ucenter后台登陆 验证码CCCC的解决方法 无法登录解决办法

做同步登录的时候,偶然发现ucenter登录的时候,验证码总是CCCC,太郁闷了,网上找了一下,听说Discuz也有这个问题,不过Discuz的比较好解决,把config.inc.php里面的chekip关掉就可以登陆了, $admincp['checkip'] = 0; // 后台管理操作是否验证管理员的 IP, 1=是[安全], 0=否。仅在管理员无法...