zoukankan      html  css  js  c++  java
  • .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

      

  • 相关阅读:
    Zoj 3511 线段树
    HDU 3340 Rain in ACStar 线段树+简单几何?
    BZOJ 2282 & 树的直径
    BZOJ 1121 & science
    BZOJ 1067 & Interval_Tree
    BZOJ 1001 & SPFA
    UVa 11181 条件概率
    并查集——启发式合并,路径压缩
    GSS系列(1)——GSS1&&GSS3
    评测脚本
  • 原文地址:https://www.cnblogs.com/swjian/p/11531831.html
Copyright © 2011-2022 走看看