Cookie 1.HTTP無連接無狀態,Cookie和Session就是解決此問題。 2.客戶端向伺服器端發送一個請求的時,服務端向客戶端發送一個Cookie 然後瀏覽器將Cookie保存,之後每次HTTP請求瀏覽器都會將Cookie發送給伺服器端,需要衡量把什麼數據放到cookie中,很多數據並不 ...
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 "登錄失敗";
}
}
}