.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

  


免責聲明!

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



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