緣起:
公司領導讓我做一個測試的demo,功能大概是這樣的:用戶通過微信掃一掃登陸網站,如果用戶登錄過則直接進入主界面,否則就保留在登錄界面。
實現方法:
首先先把網站地址生成個二維碼,在掃描二維碼后去獲取Cookie如果有值那么就證明登錄過直接跳轉到主界面,如果Cookie不存在用戶通過登錄記錄的用戶信息並保存到Cookie。
什么是Cookie:
儲存在用戶本地終端上的數據。
一段文本數據,默認存儲在客戶端,一種存放在瀏覽器緩存,一種存放在磁盤,最大可存儲4kb。
代碼部分:
/// <summary> /// 設置本地cookie /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="minutes">過期時長,單位:分鍾</param> protected void SetCookies(string key, string value, int minutes = 30) { HttpContext.Response.Cookies.Append(key, value, new CookieOptions { Expires = DateTime.Now.AddMinutes(minutes), }); } /// <summary> /// 刪除指定的cookie /// </summary> /// <param name="key">鍵</param> protected void DeleteCookies(string key) { HttpContext.Response.Cookies.Delete(key); } /// <summary> /// 獲取cookies /// </summary> /// <param name="key">鍵</param> /// <returns>返回對應的值</returns> protected string GetCookies(string key) { HttpContext.Request.Cookies.TryGetValue(key, out string value); if (string.IsNullOrEmpty(value)) value = string.Empty; return value; }
遇到的坑:
.net 下這么設置Cookie是沒問題的,但是 .net core 需要刪除對非必要cookie的同意檢查。
方法一:
將Startup中的代碼:
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; });
改為:
services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. options.CheckConsentNeeded = context => false; options.MinimumSameSitePolicy = SameSiteMode.None; });
方法二:
在存儲的時候增加 IsEssential = true 屬性
/// <summary> /// 設置本地cookie /// </summary> /// <param name="key">鍵</param> /// <param name="value">值</param> /// <param name="minutes">過期時長,單位:分鍾</param> protected void SetCookies(string key, string value, int minutes = 30) { HttpContext.Response.Cookies.Append(key, value, new CookieOptions { Expires = DateTime.Now.AddMinutes(minutes), IsEssential = true }); }
參考:
https://www.cnblogs.com/dawenyang/p/9223331.html
