前言

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

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

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

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

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

    随着ASP.NET Core 2.0发布之后,原先运行在Windows IIS中的ASP.NET WebApi站点,就可以跨平台运行在Linux中.我们有必要先说一下ASP.NET Core. ASP ...

  3. Asp.net Core2.0 缓存 MemoryCache 和 Redis

    自从使用Asp.net Core2.0 以来,不停摸索,查阅资料,这方面的资料是真的少,因此,在前人的基础上,摸索出了Asp.net Core2.0 缓存 MemoryCache 和 Redis的用法 ...

  4. 【4】Asp.Net Core2.2中间件多扩展对应应用

    [前言] 上一篇完成了Asp.Net Core 2.2全新的管道处理模型解析,“俄罗斯套娃”式的委托嵌套和传递,组建了扩展性无与伦比的管道模型!与此同时,委托嵌套过于复杂,使用起来并不友好,然后多种扩 ...

  5. 【3】Asp.Net Core2.2新版管道处理模型

    [前言] 上一篇完成了Asp.Net Core 2.2项目的一个最简单功能的添加,从控制器-视图-实体轻松交互了一下,感觉跟之前的MVC没啥差别!但这些都是在组件封装的基础上完成的,在Core里面,其 ...

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

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

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

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

  8. 【1】Asp.Net Core2.2从环境配置到应用建立

    作者:Eleven 来源:公众号[软谋net] [前言] .Net Core开源&跨平台,已经肉眼可见将成为.Net平台的未来,在企业招聘需求上已经频频见到,接触到很多公司内部都已经开始尝试C ...

  9. 【翻译】asp.net core2.0中的token认证

    原文地址:https://developer.okta.com/blog/2018/03/23/token-authentication-aspnetcore-complete-guide token ...

随机推荐

  1. Python-Flask框架之——图书管理系统 , 附详解源码和效果图 !

    该图书管理系统要实现的功能: 1. 可以通过添加窗口添加书籍或作者, 如果要添加的作者和书籍已存在于书架上, 则给出相应的提示. 2. 如果要添加的作者存在, 而要添加的书籍书架上没有, 则将该书籍添 ...

  2. Roundcube Webmail跨站脚本漏洞(CVE-2015-5381 )

    Preface Software: https://roundcube.net/Versions: 1.1.x<1.1.2CVE: CVE-2015-5381Author: sroesemann ...

  3. ES6(阮一峰)学习总结

    1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); co ...

  4. 微信小程序-设计指南

    基于微信小程序轻快的特点,官方拟定了小程序界面设计指南和建议,可作为小程序开发参考. 友好礼貌 -避免用户使用服务时被周围环境干扰,设计时应减少无关设计对用户的影响,礼貌的向用户提供服务,友好的引导用 ...

  5. 爬虫之proxy(代理)

    proxy简介 proxy即为代理,我们爬虫的时候肯定会有频繁访问某一网站的情况,这个时候有些服务器会识别到我们是非正常访问,就会把我们的IP禁掉,这个时候就需要用代理了. 就好比现实生活中,我需要向 ...

  6. C++内存深入理解

    转载地址:http://www.cnblogs.com/DylanWind/archive/2009/01/12/1373919.html 前部分原创,转载请注明出处,谢谢! class Base  ...

  7. css 选择器【转】

    最近在研究jQuery的选择器,大家知道jQuery的选择器和css的选择器非常相似,所以整理一下css选择器: css1-css3提供非常丰富的选择器,但是由于某些选择器被各个浏览器支持的情况不一样 ...

  8. ABP+AdminLTE+Bootstrap Table aspnetboilerplate 学习

    http://www.cnblogs.com/anyushengcms/p/7325126.html https://github.com/aspnetboilerplate/aspnetboiler ...

  9. C# DataGridView绑定List对象时,利用BindingList来实现增删查改

    当DataGridView的DataSource是DataTable的时候,DataTable的数据改变时,DataGridView的数据会随之改变,无需重新绑定到DataGridView.  当Da ...

  10. PAT1133:Splitting A Linked List

    1133. Splitting A Linked List (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CHEN, Y ...