您好我们使用mvc4开发Web应用程序并使用表单身份验证。每件事情都很好,但我们注意到了很短的几天奇怪的行为。即使由于此用户无法登录而在登录页面中正确完成身份验证,global.asax中的cookie也为null。以下是我的代码。
登录页面。
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);
Global.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 = new FormsAuthenticationTicket( 1, UserDetails.UserID, DateTime.Now, DateTime.Now.AddMinutes(90), 假, 的使用用户数据);
当我在userdata中的用户信息较少时,一切正常。但是当userdata包含关于用户的大量信息时,则在登录时发生auth,但在globl.asax中cookie变为null。真奇怪。请指导我。
在这两个场景中都创建了cookie,我可以在IE11浏览器中看到。
UserData(Less data)包含。 147 charcter - 工作正常。
UserData(大数据)包含。 1045个字符 - 它不起作用。