票据

127 阅读1分钟

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);
            }
           
        }

    }