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

前言

时间一晃 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局部视图

在如图位置:

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

不过这时候你要是满心欢喜的点了同意..那就需要多看看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强制存储.

原文地址:https://www.cnblogs.com/LiChen19951127/p/10054483.html

时间: 2024-10-10 17:21:31

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

一步一步带你做WebApi迁移ASP.NET Core2.0

随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP.NET Core 是新一代的 ASP.NET,第一次出现时的代号为 ASP.NET vNext,后来命名为ASP.NET 5,随着它的完善与成熟,最终命名为 ASP.NET Core,这表明它已不是 ASP.NET 的升级,而是一个重新设计的Web开发框架.而它一个非常重要的变化就是它不再依赖于I

asp.net core2.0 登录效果实现

基础 新建项目的,新建登录页的基本操作略,主要说下在实现登录过程碰到的问题,废话不多说,让我们进入主题. 验证码 asp.net.core2.0本身有提供system.drawing命名空间,但是没有Image,Graphics,Bitmap等对象的实现,只能引用第三方的dll来操作. 1.在vs的项目里打开nuget包管理器,搜索关键字"drawing",显示很多可用的包,选择安装"zkweb.system.drawing" 包 2.实现随机字符串的图片显示代码

centos7.x docker 跑asp.net core2.x项目

windows内: 做一个vs2017(15.8版本)新建.net core项目 asp.net core web应用程序api项目模板 asp.net core2.1 不选docker支持(因为在windows下配docker支持非常麻烦) https开着,不过默认发布到linux的时候最后好像都是http: 新建得项目WebApplication1,调试的话 https://localhost:5001/api/values会返回一个json文件内容是 ["value1",&quo

ASP.NET Core2基于RabbitMQ对Web前端实现推送功能

在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用),所以基于WebSocket技术实现的通讯方案正越来越受大家喜爱,于是在ASP.NET中就有了鼎鼎大名的Signalr.但Signalr不是咱们这里的主角,这里将给大家介绍另一套基于WebSocket的前后端通讯方案,可以给大家在应用中多一个选择. 准备 在开始动手前,咱们先简单介绍下方案的组成部

asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二)

原文:asp.net core2.0 部署centos7/linux系统 --守护进程supervisor(二) 续上一篇文章:asp.net core2.0 部署centos7/linux系统 --安装部署(一),遗留的问题而来,对程序添加守护进程,使网站可以持续化的运行起来. ? 1.介绍supervisor ?? ?Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,

将asp.net core2.0项目部署在IIS上运行

原文:将asp.net core2.0项目部署在IIS上运行 前言: ?与ASP.NET时代不同,ASP.NET Core不再是由IIS工作进程(w3wp.exe)托管,而是独立运行的.它独立运行在控制台应用程序中,并通过dotnet运行时命令调用.它并没有被加载到IIS工作进程中,但是IIS却加载了名为AspNetCoreModule的本地Module,这个Module用于执行外部的控制台程序. ?部署之前要确保你的IIS上已经安装了AspNetCoreModule托管模块,如果没有的话,点击

深度理解IIS下部署ASP.NET Core2.1 Web应用拓扑图

原文:深度理解IIS下部署ASP.NET Core2.1 Web应用拓扑图 IIS部署ASP.NET Core2.1 应用拓扑图 我们看到相比Asp.Net, 出现了3个新的组件:ASP.NET Core Module.Kestrel.dotnet.exe, 后面我们会理清楚这三个组件的作用和组件之间的交互原理. 引入Kestrel的原因 进程内HTTP服务器,与老牌web服务器解耦,实现跨平台部署 IIS.Nginx.Apache等老牌web服务器有他们自己的启动进程和环境:为了实现跨平台部署

ASP.NET Core2.2+Quartz.Net 实现web定时任务

原文:ASP.NET Core2.2+Quartz.Net 实现web定时任务 作为一枚后端程序狗,项目实践常遇到定时任务的工作,最容易想到的的思路就是利用Windows计划任务/wndows service程序/Crontab程序等主机方法在主机上部署定时任务程序/脚本. 但是很多时候,若使用的是共享主机或者受控主机,这些主机不允许你私自安装exe程序.Windows服务程序. 码甲会想到在web程序中做定时任务, 目前有两个方向: ①.AspNetCore自带的HostService, 这是

Asp.NET Core2.0 项目实战入门视频课程_完整版

END OR START? 看到这个标题,你开不开心,激不激动呢? 没错,.net core的入门课程已经完毕了.52ABP.School项目从11月19日,第一章视频的试录制,到今天完整版出炉,离不开各位的帮助和加油. 课程概述 52ABP大学例子程序演示如何使用Entity Framework(EF) Core 2.0 和 Visual Studio 2017 创建一个 ASP.NET Core 2.0 MVC web 应用. 例子是一个大学的网站.它包括了学生入学,创建课程.教师管理等功能