.net core Cookie的使用

缘起:

  公司领导让我做一个测试的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

  

posted @ 2019-09-17 09:57  没事儿写个bug  阅读(3636)  评论(1编辑  收藏  举报