private static void OnAuthenticateRequest(object sender, EventArgs e)
		{
			var application = (HttpApplication) sender;

			HttpContext context = application.Context;

			if (context.User != null && context.User.Identity.IsAuthenticated)
				return;

			string cookieName = FormsAuthentication.FormsCookieName;

			HttpCookie cookie = application.Request.Cookies[cookieName.ToUpper()];

			if (cookie == null)
				return;
			try
			{
				FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
				var identity = new CustomIdentity(AccountEntry.Deserialize(ticket.UserData), ticket.Name);
				var principal = new GenericPrincipal(identity, identity.GetRoles());
				context.User = principal;
				Thread.CurrentPrincipal = principal;
			}
			catch
			{
			}
		}
        public void SignIn(User user, bool createPersistentCookie)
        {
            var accountEntry = new AccountEntry(user);

            var authTicket = new FormsAuthenticationTicket(1,
                                                           user.Login,
                                                           DateTime.Now,
                                                           DateTime.Now.AddMinutes(45),
                                                           createPersistentCookie,
                                                           accountEntry.Serialize());

            string encryptedTicket = FormsAuthentication.Encrypt(authTicket);

            var authCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket)
                                 {
                                     Expires = DateTime.Now.Add(FormsAuthentication.Timeout),
                                 };

            HttpContext.Current.Response.Cookies.Add(authCookie);

            var identity = new CustomIdentity(accountEntry, authTicket.Name);

            HttpContext.Current.User = new GenericPrincipal(identity, identity.GetRoles());
        }