ASP.NET Core2.1 你不得不瞭解的GDPR(Cookie處理)

前言

時間一晃 ASP.NET Core已經迭代到2.1版本了.html

火燒眉毛的的下載了最新的版本,而後生成了一個模版項目來試試水.前端

...而後就碰到問題了... 我發現..cookie居然存不進去了..(怨念+100)瀏覽器

找了各類資料,無果  最後無奈只得麻煩善友老師..老師回了一句GDPR安全

雖然一頭霧水,可是仍是去百度了一發.終於找到緣由..(E文好的能夠自行跳轉,很差的..就往下看)cookie

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

 

正文

 

是由於從ASP.NET Core2.1開始,咱們的ASP.NET開始能夠支持GDPR規範了,(並且順帶他生成的模版,直接就幫你開啓了.)post

那麼什麼是GDPR規範呢?網站

百度百科以下:ui

《通用數據保護條例》(General Data Protection Regulation,簡稱GDPR)爲歐洲聯盟於2018年5月25日出臺的條例,前身是歐盟在1995年制定的《計算機數據保護法》。spa

注意出臺時間..2018年5月25號..我去啊 纔出來就支持了..還真是與時俱進..

那麼這個東西和存不進Cookie有什麼關係呢?

由於這個條例把cookie限制爲用戶隱私數據,若是要使用的話,必須徵得用戶贊成.

並且在ASP.NET Core2.1的官方項目模板在建立的Razor Pages和MVC項目的時候,會自動幫你添加這個GDPR協議的支持.so..就存不進去了..

大概在模版中幫咱們生成了以下內容:

  • 在Startup設置了 CookiePolicyOptionsUseCookiePolicy
  • 添加_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強制存儲.

相關文章
相關標籤/搜索