缘起:
公司领导让我做一个测试的demo,功能大概是这样的:用户通过微信扫一扫登陆网站,如果用户登录过则直接进入主界面,否则就保留在登录界面。
实现方法:
首先先把网站地址生成个二维码,在扫描二维码后去获取Cookie如果有值那么就证明登录过直接跳转到主界面,如果Cookie不存在用户通过登录记录的用户信息并保存到Cookie。
什么是Cookie:
储存在用户本地终端上的数据。
一段文本数据,默认存储在客户端,一种存放在浏览器缓存,一种存放在磁盘,最大可存储4kb。
代码部分:
1/// <summary> 2/// 设置本地cookie /// </summary> 3/// <param name="key">键</param> 4/// <param name="value">值</param> 5/// <param name="minutes">过期时长,单位:分钟</param> 6protected void SetCookies(string key, string value, int minutes = 30) 7{ 8 HttpContext.Response.Cookies.Append(key, value, new CookieOptions 9 { 10 Expires \= DateTime.Now.AddMinutes(minutes), 11 }); 12} /// <summary> 13/// 删除指定的cookie /// </summary> 14/// <param name="key">键</param> 15protected void DeleteCookies(string key) 16{ 17 HttpContext.Response.Cookies.Delete(key); 18} /// <summary> 19/// 获取cookies /// </summary> 20/// <param name="key">键</param> 21/// <returns>返回对应的值</returns> 22protected string GetCookies(string key) 23{ 24 HttpContext.Request.Cookies.TryGetValue(key, out string value); if (string.IsNullOrEmpty(value)) 25 value \= string.Empty; return value; 26}
遇到的坑:
.net 下这么设置Cookie是没问题的,但是 .net core 需要删除对非必要cookie的同意检查。
方法一:
将Startup中的代码:
1services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. 2 options.CheckConsentNeeded = context => true; 3 options.MinimumSameSitePolicy \= SameSiteMode.None; 4});
改为:
1services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential cookies is needed for a given request. 2 options.CheckConsentNeeded = context => false; 3 options.MinimumSameSitePolicy \= SameSiteMode.None; 4});
方法二:
在存储的时候增加 IsEssential = true 属性
1/// <summary> 2/// 设置本地cookie /// </summary> 3/// <param name="key">键</param> 4/// <param name="value">值</param> 5/// <param name="minutes">过期时长,单位:分钟</param> 6protected void SetCookies(string key, string value, int minutes = 30) 7{ 8 HttpContext.Response.Cookies.Append(key, value, new CookieOptions 9 { 10 Expires \= DateTime.Now.AddMinutes(minutes), 11 IsEssential \= true }); 12}
参考:
https://www.cnblogs.com/dawenyang/p/9223331.html
本文转自 https://www.cnblogs.com/swjian/p/11531831.html,如有侵权,请联系删除。
