ASP.NET Core 授权一(简单的Cookie)

  • ASP.NET Core 授权一(简单的Cookie)已关闭评论
  • 87 次浏览
  • A+
所属分类:.NET技术

Cookie

1.HTTP无连接无状态,Cookie和Session就是解决此问题。 2.客户端向服务器端发送一个请求的时,服务端向客户端发送一个Cookie 然后浏览器将Cookie保存,之后每次HTTP请求浏览器都会将Cookie发送给服务器端,需要衡量把什么数据放到cookie中,很多数据并不是每次请求都需要发给服务端,网络开销,浪费带宽,最典型的放身份认证信息。 3.Cookie有两种保存方式,一种是浏览器会将Cookie保存在内存中,还有一种是保存在客户端的硬盘中。 4.Cookie的生存周期设置为负值 ,表示的是临时储存,不会写入cookie文件,只会存在浏览器内存中,且只会在打开的浏览器窗口或者子窗口有效,一旦浏览器关闭,cookie就会消失;Cookie的生存周期设置为 ‘0‘ ,表示仅在会话期间有效。 5.Cookie大小不能超过4kb,站点内不能超过20个,浏览器里面不能超过300个 

Program.cs

//注册鉴权架构 #region Cookie builder.Services.AddAuthentication("Cookies").AddCookie(o =>{     o.LoginPath = "/api/Login/NoLogin"; }); #endregion 

TestController.cs

[ApiController] [Route("api/[controller]")] public class TestController : ControllerBase {     [Authorize]     [HttpGet]     public async Task<string> Get()     {         return await Task.FromResult(DateTime.Now.ToString());     } } 

LoginController.cs

[ApiController] [Route("api/[controller]/[action]")] public class LoginController : ControllerBase {     [HttpGet]     public async Task<string> NoLogin()     {         return "您还没有登录";     }     [HttpGet]     public async Task<string> LoginSuccess(string userName, string password)     {         if (userName == "admin" && password == "123456")         {             ClaimsIdentity identity = new ClaimsIdentity("Ctm");             identity.AddClaim(new Claim(ClaimTypes.Name, userName));             identity.AddClaim(new Claim(ClaimTypes.NameIdentifier, "1"));             await HttpContext.SignInAsync("Cookies", new ClaimsPrincipal(identity));             return "登录成功";         }         else         {             return "登录失败";         }     } }