時間一晃 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..就存不進去了..
大概在模版中幫咱們生成了以下內容:
咱們來看看它添加的內容(這裏由於沒用到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就能正常的使用了
可是,既然歐盟出臺了這個規範,雖然管不到中國..估計早晚要全球推廣或者你作的是歐盟國際的項目,就必然要支持..因此咱們繼續往下看..
在如圖位置:
咱們打開,會發現裏面是一句提示,有贊成和了解更多的一些選項,咱們翻譯一下,運行項目,效果以下:
不過這時候你要是滿心歡喜的點了贊成..那就須要多看看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的使用.
Guid date = Guid.NewGuid();
Response.Cookies.Append("UserName666", date.ToString());
與以前的asp.net 不一樣,設置cookie的詳細屬性值,不在是new一個HttpCookie對象了..
而是在Append的時候多了一個參數,爲CookieOptions
使用方法以下:
Response.Cookies.Append("8888", "999999", new CookieOptions() { HttpOnly = true, Secure = true });
幾個經常使用的cookie屬性解釋一下:
設置爲後臺只讀模式,前端沒法經過JS來獲取cookie值,能夠有效的防止XXS攻擊
採用安全模式來傳遞cookie,若是設置爲true,就是當你的網站開啓了SSL(就是https),的時候,這個cookie值纔會被傳遞
cookie的有效毫秒數,若是設置爲負值的話,則爲瀏覽器進程Cookie(內存中保存),關閉瀏覽器就失效;若是設置爲0,則當即刪除該Cookie。
2.4 IsEssential
是否強制存儲cookie,注意,這裏的強制 是針對於上面所講的內容的..也就是當用戶不一樣意使用cookie的時候,你也能夠經過設置這個屬性爲true把cookie強制存儲.