前言

时间一晃 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强制存储.

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

转载于:https://www.cnblogs.com/LiChen19951127/p/10054483.html

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

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

    前言 时间一晃 ASP.NET Core已经迭代到2.1版本了. 迫不及待的的下载了最新的版本,然后生成了一个模版项目来试试水. ...然后就碰到问题了... 我发现..cookie竟然存不进去了.. ...

  2. ASP.NET Core2调用Azure云上的PowerBI报表展示

    在开发企业应用中,报表功能是当之无愧的重头戏,如何将数据通过合适的报表呈现出来成为每个项目人员必需面临的问题.而找到一款合适的报表往往都需要考率价格.开发.风格.支撑等因素.那么,我在这里给大家介绍一 ...

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

    在我们很多的Web应用中会遇到需要从后端将指定的数据或消息实时推送到前端,通常的做法是前端写个脚本定时到后端获取,或者借助WebSocket技术实现前后端实时通讯.因定时刷新的方法弊端很多(已不再采用 ...

  4. 从ASP.NET Core2.2到3.0你可能会遇到这些问题

    趁着假期的时间所以想重新学习下微软的官方文档来巩固下基础知识.我们都知道微软目前已经发布了.NET Core3.0的第三个预览版,同时我家里的电脑也安装了vs2019.So,就用vs2019+.NET ...

  5. IIS作为ASP.NET Core2.1 反向代理服务器未说的秘密

    --以下内容针对 ASP.NET Core2.1,2.2出现IIS进程内寄宿 暂不展开讨论--- 相比ASP.NET,出现了3个新的组件:ASP.NET Core Module.Kestrel.dot ...

  6. asp.net core2.2 多用户验证和授权

    asp.net core2.2 用户验证 和授权有很详细和特贴心的介绍,我感兴趣的主要是这两篇: cookie身份验证 基于角色的授权 我的项目有两类用户: 微信公众号用户,用户名为公众号的openi ...

  7. ASP.NET Core2读写InfluxDB时序数据库

    在我们很多应用中会遇到有一种基于一系列时间的数据需要处理,通过时间的顺序可以将这些数据点连成线,再通过数据统计后可以做成多纬度的报表,也可通过机器学习来实现数据的预测告警.而时序数据库就是用于存放管理 ...

  8. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...

    Swashbuckle.AspNetCore3.0 介绍 一个使用 ASP.NET Core 构建的 API 的 Swagger 工具.直接从您的路由,控制器和模型生成漂亮的 API 文档,包括用于探 ...

  9. ASP.Net Core2.1中的HttpClientFactory系列一

    引言: ASP.NET Core2.1 中出现了一个新的 HttpClientFactory 功能, 它有助于解决开发人员在使用 HttpClient 实例从其应用程序中访问外部 web 资源时可能遇 ...

最新文章

  1. cocos2dx 3.3 异步加载纹理
  2. 基于PSO的运输优化算法的MATLAB仿真
  3. 行星轨迹制作_FLASH做的八大行星的轨道图的教学
  4. [转]常用OCR软件介绍
  5. 一、学爬虫前,你需要知道的爬虫常识
  6. 算法 --- 顺序查找、二分查找的js实现
  7. 带你理解Spring AOP
  8. 如何在Windows环境下的VS中安装使用Google Protobuf完成SOCKET通信
  9. linux默认安装数据库密码是多少,Linux服务器上安装MySql数据库(默认安装,密码为空),首次使用需要修改密码(示例代码)...
  10. 电脑网络怎么添加计算机,Win10系统如何添加网络共享打印机
  11. JDK/Java SE官方文档汇总
  12. 又涨啦!2021年6月程序员工资出炉
  13. 大企业中,Java面试官最爱问的问题集锦
  14. onnx-tensorrt:builtin_op_importers.cpp:628:5: error: ‘IIdentityLayer’ is not a member of ‘nvinfer1’
  15. php文件开头加数据,在PHP中附加到文件的开头
  16. Android仿人人客户端(v5.7.1)——新鲜事之分享照片
  17. ics服务启动失败的一种解决方法
  18. tornado 自定义WEB框架 、与Tyrion组件做表单验证
  19. 【转】《伤心者》作者:何夕 ——对有些东西是不应该过多讲求回报的,你不应该要求它们长出漂亮的叶子和花来,因为它们是根...
  20. linux0.11磁盘映像制作及其剩余程序阅读注释笔记

热门文章

  1. 票据背书以及票据背书的好处
  2. 为什么有的程序员能力一般却能拿到好offer?
  3. Opencv2.4.9源码分析——Stitching(五)
  4. 我的世界Java版最大村庄_我的世界:java版完美种子,开局两村庄齐铁套
  5. u 只读 盘 突然_U盘变成只读,无法格式化,怎么办?
  6. Python 技术篇-pip版本查看和升级
  7. 【小王的安卓之路】Android原生网络请求
  8. 基于Pytorch实现的声纹识别模型
  9. websocket通信中,send的使用
  10. 非线性规划----经济调度(Python实现)