前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >ASP.NET Core2.1 你不得不了解的GDPR(Cookie处理)

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

作者头像
GuZhenYin
发布于 2018-07-31 08:26:34
发布于 2018-07-31 08:26:34
90000
代码可运行
举报
文章被收录于专栏:GuZhenYinGuZhenYin
运行总次数:0
代码可运行

前言

时间一晃 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的代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
            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里面的相关代码并没有写完..

那我们自己把他补充完整.

首先我们添加控制器方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 public bool OkCookie()
 {
    var consentFeature = HttpContext.Features.Get<ITrackingConsentFeature>();
    consentFeature.GrantConsent();
    return true;
 }

也就是让该用户同意使用cookie并做上标记.(原理其实就是在cookie中添加了一个标记,如果有这个标记就是同意了.可以自行查看源码)

然后我们添加JS脚本如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        (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.代码如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
Guid date = Guid.NewGuid();
Response.Cookies.Append("UserName666", date.ToString());

2.设置cookie属性

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

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

使用方法如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 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强制存储.

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

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

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

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

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
   最近一两个星期,加班,然后回去后弄自己的博客,把自己的电脑从 Windows 10 改到 Ubuntu 18.10 又弄回 Windows 10,原本计划的学习 Vue 中生命周期的相关知识目前也没有任何的进展,嗯,罪过罪过。看了眼时间,11月也快要结束了,准备补上一篇如何将我们的 .NET Core 2.0 版本的程序升级到 .NET Core 2.1 版本,好歹也算多学了一点。
程序员宇说
2019/09/11
1.2K0
ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
[ASP.NET Core 3.1]浏览器嗅探解决部分浏览器丢失Cookie问
看了前文的同学们应该都知道,搜狗、360等浏览器在单点登录中反复重定向,最终失败报错。
有态度的马甲
2020/04/16
1.3K0
将传统 ASP.NET 应用迁移到 .NET Core
现在越来越多的人在谈论. NET Core。诚然,.NET Core 是未来, 但是.NET Framework 仍在支持, 因为大量的应用程序无法在短时间内迁移。
Edi Wang
2019/07/08
4.9K1
将传统 ASP.NET 应用迁移到 .NET Core
ASP.NET Core 2.1 : 十.升级现有Core2.0 项目到2.1
.NET Core 2.1 终于发布了, 赶紧升级一下。 一. 安装SDK 首先现在并安装 SDK(64-bit) 安装完毕后如果新建项目可以看到已经有2.1的选项了 二. 更新现有2.0项目到2.1
FlyLolo
2018/06/21
8600
在 ASP.NET Core 应用中使用 Cookie 进行身份认证
身份认证是网站最基本的功能,最近因为业务部门的一个需求,需要对一个已经存在很久的小工具网站进行改造,因为在逐步的将一些离散的系统迁移至 .NET Core,所以趁这个机会将这个老的 .NET Framework 4.0 的项目进行升级
程序员宇说
2021/02/04
1.4K0
在 ASP.NET Core 应用中使用 Cookie 进行身份认证
.NetCore 使用Cookie
1、首先我们在Startup下面的ConfigureServices中注册授权认证服务以及AddCookie
小世界的野孩子
2019/09/11
1.3K0
使用cookie来做身份认证
这里先讲一下Authentication和Authorization两个词的区别。
_淡定_
2018/08/28
3.6K0
使用IdentityServer出现过SameSite Cookie这个问题吗?
首先,好消息:Google 将在 2020 年 2 月发布 Chrome 80时,包括 Google 实施的“渐进式更好的 Cookie”(Incrementally better Cookies),这将使网络成为一个更安全的地方,并有助于确保用户获得更好的隐私(站长注:现在是2022年4月28号,Chrome已经发布了多个更新版本)。
沙漠尽头的狼
2022/06/10
1.6K0
ASP.NET MVC升级到ASP.NET Core MVC踩坑小结
ASP.NET Core是微软新推出的支持跨平台、高性能、开源的开发框架,它的优势不必多说,因为已经说得太多了。当然,现在依然有着数量庞大的系统运行于.NET Framework上,由于有大量的Break Changes,很多项目项目团队也不敢贸然升级,其中的考量也不全部是技术原因,更多的可能还是业务推进因素。
AI.NET 极客圈
2020/05/18
2.4K0
.Net Core Web Api实践(三).net core+Redis+docker实现Session共享
前言:上篇文章介绍了.net core+Redis+IIS+nginx实现Session共享,本来打算直接说明后续填坑过程,但毕竟好多坑是用docker部署后出现的,原计划简单提一下.net core+Redis+docker实现Session共享,但是发现篇幅也不小,所以还是单独起草一篇,除了k8s部署docker,其它部分都有基本介绍。
李明成
2020/02/20
1.9K0
理解ASP.NET Core - Cookie 的身份认证
链接:cnblogs.com/xiaoxiaotank/p/15811749.html
郑子铭
2022/03/22
1K0
理解ASP.NET Core - Cookie 的身份认证
asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
通过在ASP.NET Core应用中 配置 Response Caching Middleware ,决定什么时候 response 是可以缓存,存储response,和从缓存中提供response 服务。
Vincent-yuan
2019/09/11
7490
asp.net core 系列之Reponse caching 之 Response Caching Middleware(4)
ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记
任务16:oauth2 + oidc 实现 client部分 实现 client 之前启动一下上一节的 server,启动之前需要清除一些代码 注释 Program 的 MigrateDbContext public static void Main(string[] args) { BuildWebHost(args) //.MigrateDbContext<ApplicationDbContext>((context, services) => { // n
郑子铭
2021/01/13
7860
ASP.NET Core分布式项目实战(oauth2 + oidc 实现 client部分)--学习笔记
Asp.Net Core 中间件应用实战中你不知道的那些事
这篇文章主要分享Endpoint 终结点路由的中间件的应用场景及实践案例,不讲述其工作原理,如果需要了解工作原理的同学, 可以点击查看以下两篇解读文章:
Jlion
2022/04/07
8920
Asp.Net Core 中间件应用实战中你不知道的那些事
ASP.NET Core Cookie 认证
Cookie 认证是ASP.NET Core用来实现客户自定义认证逻辑,没有使用ASP.NET Core Identity
郑子铭
2023/12/13
2450
ASP.NET Core Cookie 认证
金三银四面试:ASP.NET Core面试题汇总
金三银四面试准备,奉上第三弹ASP.NET Core面试题汇总。先出题大家试答一下,然后再看后面的答案。希望对大家面试有所帮助。
郑子铭
2024/05/08
3190
金三银四面试:ASP.NET Core面试题汇总
临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障
经过测试, 出现单点登陆故障的是搜狗、360等双核浏览器(默认使用Chrome内核), 较新式的Edge、Chrome、Firefox均未出现此障碍。
有态度的马甲
2020/04/16
1.9K0
临近年关,修复ASP.NET Core因浏览器内核版本引发的单点登录故障
ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明
ASP.NET Core 应用使用 Startup 类,按照约定命名为 Startup 。 Startup 类:
痴者工良
2019/08/08
3.6K0
ASP.NET Core Startup类 Configure()方法 | ASP.NET Core 中间件详细说明
ASP.NET Core 中基于 Cookie 的身份鉴权实现
在 ASP.NET Core 应用中,基于 Cookie 的身份鉴权是一种常见的身份验证方式,特别适用于传统的 Web 应用程序。Cookie 能够在用户的浏览器中存储身份验证数据,从而在用户访问应用的不同页面时保持登录状态。
郑子铭
2025/03/11
670
ASP.NET Core 中基于 Cookie 的身份鉴权实现
DotNetCore Web应用程序中的Cookie管理
作者简介:Jon(Jonathan)Seeley,一位资深.NET开发者,主要从事Asp.NET/Asp.NET CORE/WPF等技术栈的开发,他的博客地址为https://www.seeleycoder.com/。
心莱科技雪雁
2020/04/07
2.5K0
推荐阅读
相关推荐
ASP.NET Core 实战:将 .NET Core 2.0 项目升级到 .NET Core 2.1
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档