【51CTO.com快译】cookie是通常用于存储有关用户信息的一条数据,存储在用户的计算机上。在大多数浏览器中,每个cookie都存储为一个小文件,但在Firefox中,它们一起存储在一个文件中。 cookie表示为键值对,你可以利用键来读取、写入或删除cookie。
ASP.NET Core使用cookie来维护会话状态。包含会话ID的cookie随每个请求一起发送到客户端。本文讨论了如何处理ASP.NET Core中的cookie。
若要使用本文提供的代码示例,你应该在系统中安装Visual Studio 2019。如果还没有一份,可以在此处下载Visual Studio 2019(https://visualstudio.microsoft.com/downloads/)。
在Visual Studio中创建ASP.NET Core MVC项目
先不妨在Visual Studio 2019中创建一个ASP.NET Core MVC项目。假设系统中已安装Visual Studio 2019,请按照以下概述的步骤,在Visual Studio中创建一个新的ASP.NET Core MVC项目。
- 启动Visual Studio IDE。
- 点击“创建新项目”。
- 在“创建新项目”窗口中,从显示的模板列表中选择“ASP.NET Core Web应用程序”。
- 点击“下一步”。
- 在“配置新项目”窗口中,指定新项目的名称和位置。
- 可选情况下,选中“将解决方案和项目放在同一个目录中”复选框。
- 点击“创建”。
- 在接下来显示的“创建新的ASP.NET Core Web应用程序”窗口中,从顶部下拉列表中选择.NET Core作为运行时环境,并选择ASP.NET Core 2.2(或更高版本)。
- 选择“Web应用程序(Model-View-Controller)”作为项目模板,以创建新的ASP.NET Core MVC应用程序。
- 确保“启用Docker支持”和“配置HTTPS”这两个复选框未勾选,因为我们在这里不会使用这些功能。
- 确保“身份验证”设置为“不进行身份验证”,因为我们在这里也不会使用身份验证。
- 点击“创建”。
现在,你应该已经准备好在Visual Studio中使用一个新的ASP.NET Core MVC项目。我们将在本文的后续部分使用该项目。
在ASP.NET Core中读取cookie
你可以从Request.cookies集合读取cookie。下面的代表片段说明了如何从ASP.NET Core中的Request对象读取cookie。
- string cookie = Request.Cookies["Key"];
如果你想指定cookie的到期失效时间,可以使用Append方法的重载版本,如下面给出的代码片段所示。
- CookieOptions option = new CookieOptions();
- option.Expires = DateTime.Now.AddMilliseconds(10);
- Response.Cookies.Append(key, value, option);
cookieOptions类使你可以在创建cookie时指定以下额外属性:
- 域—用于指定与cookie有关的域
- 到期失效时间—用于指定cookie的到期失效时间
- 路径—用于指定cookie路径
- 安全策略—用于指定cookie是否可以通过HTTPS来访问
- HttpOnly—用于指定cookie是否仅对服务器可用
在ASP.NET Core中写入cookie
想写入cookie,你可以利用与Request对象有关的Append方法。以下代码片段说明了如何做到这一点。
- Response.Cookies.Append(somekey, somevalue);
在ASP.NET Core中删除cookie
若要删除cookie,可以使用与Request对象有关的cookies集合的Delete方法。以下代码片段说明了如何做到这一点。
- Response.Cookies.Delete(somekey);
在ASP.NET Core中访问HttpContext
在本节中,我们将介绍如何在ASP.NET Core中处理cookie数据。我们需要访问HttpContext才能访问Request对象。你可以使用IHttpContextAccessor接口,访问ASP.NET Core中的HttpContext。HttpContextAccessor类实现该接口。
首先,你应该注册IHttpContextAccessor用于依赖项注入。以下代码片段说明了如何在Startup类的ConfigureServices方法中添加类型HttpContextAccessor的单一服务。
- public void ConfigureServices(IServiceCollection services)
- {
- services.AddSingleton
- HttpContextAccessor>();
- //Other code
- }
你可以利用依赖项注入来获得IHttpContextAccessor实例的引用。这将反过来为你提供HttpContext的引用。
以下代码片段说明了如何访问控制器中的IHttpContextAccessor实例。请注意,当你在Visual Studio中创建新的ASP.NET Core MVC项目后,默认情况下将创建HomeController。
- public class HomeController : Controller
- {
- private readonly IHttpContextAccessor _httpContextAccessor;
- public HomeController(IHttpContextAccessor httpContextAccessor)
- {
- this._httpContextAccessor = httpContextAccessor;
- }
- //Write your action methods here
- }
在ASP.NET Core控制器方法中写入cookie数据
你可以使用以下方法在控制器中写入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");
- }
在ASP.NET Core控制器方法中读取cookie数据
一旦cookie数据成功写入,可以使用以下方法在控制器中读取cookie数据。
- public IActionResult Read(string key)
- {
- ViewBag.Data =
- _httpContextAccessor.HttpContext.Request.Cookies[key];
- return View("ReadCookie");
- }
要检查cookie是否已正确写入,可以查看Web浏览器的cookie缓存。
原文标题:How to work with cookies in ASP.NET Core, 作者:Joydip Kanjilal
【51CTO译稿,合作站点转载请注明原文译者和出处为51CTO.com】