var json = admin.ToJson();
//2、创建票据FormsAuthenticationTicket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(2, "loginUser", DateTime.Now, DateTime.Now.AddDays(7), false, json);
参数,票据版本号默认2,名称,开始日期,结束日期,是否持久化,特定用户数据
//3、对票据加密FormsAuthentication.Encrypt(ticket)
var encrypt = FormsAuthentication.Encrypt(ticket);
//4、将加密后票据存入cookie( HttpCookie )
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypt);
//5、若用户勾选记得我,则指定cookie有效期( Expires )
if (login.IsRemeberMe)
{
cookie.Expires = DateTime.Now.AddDays(7);
}
//6、将cookie写入响应流中发送客户端(获取http请求上下文HttpContext ,移除原来的数据,存入新的)
HttpContext context = HttpContext.Current;
context.Response.Cookies.Remove(FormsAuthentication.FormsCookieName);
context.Response.Cookies.Add(cookie);
//在Global中注册 Application_AuthenticateRequest(object sender, EventArgs e) 事件函数,用于解析客户端发过来的Cookie数据 //1、获取Http请求上下文(HttpApplication=》Context) //2、获取http请求上下文中的cookie //3、若不为空则解密cookie的值获取票据 //4、若不为空则对票据中保存的用户信息进行反序列化 //5、将上下文中的User赋值(可以理解为全局的一个存储登录信息的属性) protected void Application_AuthenticateRequest(object sender, EventArgs e) { //dto =》json =》票据 =>票据加密=》cookie HttpApplication application = sender as HttpApplication; HttpContext context = application.Context; var cookie = context.Request.Cookies[FormsAuthentication.FormsCookieName]; if (cookie != null && cookie.Value != null) { var ticket = FormsAuthentication.Decrypt(cookie.Value); if (!string.IsNullOrWhiteSpace(ticket.UserData)) {
var dto = ticket.UserData.ToObject<LoginAdminDTO>();
context.User = new MyFormsPrincipal<LoginAdminDTO>(ticket, dto);
}
}
}