1. 程式人生 > >ASP.NET Core2.1 你不得不瞭解的GDPR(Cookie處理) - (轉載)

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

 

 

正文


 

是因為從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就是上面Controller中OkCookie這個Action中的consentFeature.GrantConsent()方法新增的):

然後我們再儲存我們的cookie就可以成功了.

效果如下:

本來,文章到此就結束了..但是其實關於cookie.我問了一圈周邊同事,感覺大家都是不甚瞭解的樣子..

下面也就順便說一說ASP.NET Core 中關於cookie的使用.

 

 

ASP.NET Core 關於Cookie的一些使用



1.儲存cookie.程式碼如下: