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協議的支援.
大概在模版中幫我們生成了如下內容:
- 在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.程式碼如下: