Cookie null при проверке подлинности формы

#c# #asp.net-mvc #asp.net-mvc-4 #authentication

#c# #asp.net-mvc #asp.net-mvc-4 #проверка подлинности

Вопрос:

Привет, мы разрабатываем веб-приложение с использованием mvc4 и используем проверку подлинности формы. Все работает нормально, но мы заметили странное поведение в течение нескольких дней. файл cookie в global.asax равен нулю, даже если аутентификация выполнена правильно на странице входа в систему из-за того, что этот пользователь не может войти в систему. Ниже приведен мой код.

Страница входа в систему.

  Userdata = new JavaScriptSerializer().Serialize(userData);
            FormsAuthenticationTicket authTicket = new FormsAuthenticationTicket(
                       1,
                      UserDetails.UserID,
                       DateTime.Now,
                       DateTime.Now.AddMinutes(90),
                       false,
                       Userdata);            

            string encTicket = FormsAuthentication.Encrypt(authTicket);
            HttpCookie faCookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
            Response.Cookies.Add(faCookie);              
 

Глобальный.asax

 protected void Application_PostAuthenticateRequest(Object sender, EventArgs e)
        {
            HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
            if (authCookie != null)
            {

                FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);

                var s = new System.Web.Script.Serialization.JavaScriptSerializer();
                UserInfoAuth obj = s.Deserialize<UserInfoAuth>(authTicket.UserData);

                UserInformation CurrentUser = new UserInformation(obj.UserId);
                CurrentUser.FirstName = obj.FirstName;
                CurrentUser.LastName = obj.LastName;              
                CurrentUser.ClientIdentity = Convert.ToInt32(obj.ClientIdentity);
                CurrentUser.UserIdentity = Convert.ToInt32(obj.UserIdentity);

                HttpContext.Current.User = CurrentUser;

            }
 

После борьбы более двух дней. Мы обнаружили, что это зависит от строки пользовательских данных при проверке подлинности формы.

FormsAuthenticationTicket authTicket = новый FormsAuthenticationTicket( 1, данные пользователя.Идентификатор пользователя, дата-время.Теперь, DateTime.Now.AddMinutes(90), false, Userdata);

Когда у меня было меньше информации о пользователе в userdata, все работает нормально. Но когда пользовательские данные содержат большую информацию о пользователе, тогда при входе в систему происходит авторизация, но в файле cookie globl.asax становится нулевым. Это странно. Пожалуйста, направьте меня.

В обоих сценариях создается файл cookie, который я вижу в своем браузере IE11.

Данные пользователя (меньше данных) содержат. 147 символов — все работает нормально.

Пользовательские данные (большие данные) содержат. 1045 символов — это не работает.

Комментарии:

1. вы видите этот cookie в браузере?

2. @Grundy: не знаю. я пробовал в режиме отладки. На странице входа в систему создается cookie с именем . ASPXAUTH, но в global.asax он тоже показывает null, когда информация о пользователе большая.

3. @Grundy: для обоих сценариев создается cookie. Но когда информация о пользователе большая. HttpCookie AuthCookie = Запрос. Файлы cookie [Проверка подлинности формы. FormsCookieName]; в global.asax всегда равно нулю.