ASP.NET Core2.1 中如何使用 Cookie和Session


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); })();
復制代碼
 

設置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強制存儲.

訪問我們剛剛的方法,並隱藏這個提示.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM