乐趣区

关于.net:如何在-ASPNET-Core-中-使用-cookies

cookie 罕用于保留用户相干并保留在客户端电脑上的一段数据,在大多数浏览器下,每一个 cookie 都会是一个小文件的模式存在,只有 Firefox 例外,它将所有的 cookie 都保留在一个文件中,cookie 是以 key-value 的模式体现的,能够通过这个 key 去 读取,删除,写入 等操作。

ASP.NET Core 中应用 cookie 机制来保护 session 状态,在客户端的每一次申请中,server 端都会将 sessionid 放在 cookie 中发送给客户端来实现用户跟踪,这篇文章咱们就来探讨如何应用 cookie 机制。

读取 Cookie

要想读取 Cookie 能够采纳 ASP.NET Core 中的 Request.Cookies 属性,上面的代码片段展现了如何从 Request 对象中读取 cookie。


string cookie = Request.Cookies["Key"];

如果你想给 cookie 设置一个过期工夫,能够应用 Cookies.Append 重载办法,如下代码所示:


CookieOptions option = new CookieOptions(); 
option.Expires = DateTime.Now.AddMilliseconds(10); 
Response.Cookies.Append(key, value, option); 

从下面代码中能够看到,在生成 Cookie 的过程中能够应用 CookieOptions 来给其配置一些额定参数,大体参数如下:

  • Domain

用于指定 cookie 关联的域级别。

  • Expiration time

用于指定 cookie 的过期工夫

  • Path

用于指定 cookie 的门路

  • Security policy

用于指定 cookie 是否能够通过 Https 拜访

  • HttpOnly

用于指定 cookie 是否是在 server 端可用

写入 cookie

要想写 cookie,能够利用 Cookies.Append 办法,上面的代码片段展现了如何去实现。


Response.Cookies.Append(somekey, somevalue);

删除 cookie

要想删除 cookie,能够利用 Cookies.Delete 办法,如下代码所示:


Response.Cookies.Delete(somekey);

应用 HttpContext

在这一节中咱们一起看看如何在 ASP.NET Core 中应用 cookie,要想得到 cookie 必须要有 Request 对象,要想得到 Request 对象 必须要有 HttpContext,要想得到 HttpContext 必须要利用 IHttpContextAccessor 接口,如下代码所示:


    public interface IHttpContextAccessor
    {HttpContext HttpContext { get; set;}
    }

那谁实现了这个接口呢?ASP.NET Core 中就内置了一个实现了该接口的 HttpContextAccessor 类, 如下代码所示:


    public class HttpContextAccessor : IHttpContextAccessor
    {public HttpContextAccessor();

        public HttpContext HttpContext {get; set;}
    }

有些敌人可能要问,为啥这里不间接应用父类 Controller 的 RequestHttpContext,这是因为此形式是一种强依赖,接下来给大家演示如何通过依赖注入的形式获取 HttpContext,此种更加灵便。

为了实现依赖注入,须要将 IHttpContextAccessorHttpContextAccessor 注入到 ServiceCollection 中,上面就用单例的模式进行注入,如下代码所示:


        public void ConfigureServices(IServiceCollection services)
        {
            services.AddSingleton<IHttpContextAccessor,
            HttpContextAccessor>();
            //Other code
        }

而后就能够通过依赖注入的形式获取 IHttpContextAccessor 接口的实例,再顺次获取 HttpContext 对象,上面的代码片段展现了如何在 Controller 中拜访 IHttpContextAccessor 实例。


public class HomeController : Controller
{
    private readonly IHttpContextAccessor _httpContextAccessor;
    public HomeController(IHttpContextAccessor httpContextAccessor)
    {this._httpContextAccessor = httpContextAccessor;}   
  //Write your action methods here
}

在 Controller 中写入 cookie

在 Controller 中通过如下办法将 数据 写入 cookie。


  public IActionResult Write(string key, string value, bool isPersistent)
  {CookieOptions options = new CookieOptions();
       if (isPersistent)
           options.Expires = DateTime.Now.AddDays(1);
       else
           options.Expires = DateTime.Now.AddSeconds(10);
       _httpContextAccessor.HttpContext.Response.Cookies.Append(key, value, options);
       return View("WriteCookie");
  }

在 Controller 中读取 cookie

一旦 cookie 胜利写入之后,就能够用如下办法读取 cookie。


  public IActionResult Read(string key)
  {
       ViewBag.Data =
       _httpContextAccessor.HttpContext.Request.Cookies[key];
       return View("ReadCookie");
  }

如何查看 cookie 是否被胜利写入,能够应用 浏览器的 开发者工具 来查看,在前面的文章中,咱们会探讨更多 cookie 的高级用法,比方基于 cookie 的验证和受权。

译文链接:https://www.infoworld.com/art…

更多高质量干货:参见我的 GitHub: csharptranslate

退出移动版