https://blog.csdn.net/canduecho/article/details/80651853
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); })();
訪問我們剛剛的方法,並隱藏這個提示.