栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

如何在 ASP.NET Core 中 使用 cookies

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

如何在 ASP.NET 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 的 Request 和 HttpContext,这是因为此方式是一种强依赖,接下来给大家演示如何通过依赖注入的方式获取 HttpContext,此种更加灵活。

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


 public void ConfigureServices(IServiceCollection services)
 {
     services.AddSingleton();
     //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的验证和授权。

更多高质量干货:参见我的 GitHub: [csharptranslate] github.com/ctripxchuang/csharptranslate

转载请注明:文章转载自 www.mshxw.com
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号