#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 всегда равно нулю.