我有一个ASP.NET C#MVC4网站,我在很大程度上工作得非常好。但是,当我们在移动设备上测试时,我用于身份验证的cookie将无法正常工作。我在我的控制器操作中设置了Auth cookie,但是在下次调用时尝试访问它们时它们不存在。再一次,这只是一个移动问题。适用于IE,Chrome和Firefox的桌面版本。不适用于Android上的Chrome。
编写cookie的代码(在控制器操作中):
//Set information into object that can be read out of the cookie later
FormsAuthModel UserDataObj = new FormsAuthModel
{
UserID = dmUser.ID,
PasswordChange = dmUser.PasswordChange
};
string UserData = Convert.ToBase64String(clsShared.Serialize(UserDataObj));
//Create the ticket
FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(1, dmUser.UserName, DateTime.Now, DateTime.Now.AddDays(1), false, UserData, FormsAuthentication.FormsCookiePath);
// Encrypt the ticket
string encTicket = FormsAuthentication.Encrypt(ticket);
// Create the cookie
HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encTicket);
System.Web.HttpContext.Current.Response.Cookies.Add(cookie);
读取cookie的代码(在Global.asax.cs中 - Application_PostAuthenticateRequest):
HttpCookie authCookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
try
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
UserDataObj = (FormsAuthModel)clsShared.Deserialize(Convert.FromBase64String(authTicket.UserData), typeof(FormsAuthModel));
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
//WriteEvent(string.Format("Error deserializing auth ticket - {0}", ex.Message), EventLogEntryType.Error);
}
}
AuthCookie在后续请求中始终为null。用户看到的是登录屏幕,他们将其填满,然后将其重定向到登录屏幕。
我在搜索中找不到任何有助于解释为什么所有移动请求(我的手机,平板电脑和其他用户及手机)与桌面浏览器的行为不同的原因。
非常感谢任何帮助。
谢谢!