我有一个 ASP .Net 4.5 MVC 网站,我按照本教程自定义了表单身份验证。不同之处在于我通过后端 dll 进行身份验证,因此我跳过了教程中的所有数据库内容,并且教程从数据库中获取用户的位置是我从常规方法调用中获取的。我之前已经按照这个教程进行过,并在一个新的 MVC 网站中成功实现了它。这次我在现有的 MVC 网站上实现了它,但我无法让它工作。
当cookie被添加到Response.Cookies
它时,它只存在直到代码向用户返回一个视图。之后它不再存在,Response.Cookies
这意味着在 Global.asaxApplication_PostAuthenticateRequest
方法中,var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
总是返回null
. 我尝试添加其他简单的 cookie,并且这些 cookie 按预期持续存在。
这就是我添加表单身份验证 cookie 的方式
CustomUser user = service.GetUser(username, password);
if (user != null)
{
var serializeModel = new CustomPrincipalSerializeModel
{
UserName = user.UserName,
UserId = user.Id
};
var userData = JsonConvert.SerializeObject(serializeModel);
var authTicket = new FormsAuthenticationTicket(1, user.Id, DateTime.Now, DateTime.Now.AddMinutes(30), false, userData);
var encryptedTicket = FormsAuthentication.Encrypt(authTicket);
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.Now.AddMinutes(30) };
Response.AppendCookie(cookie);
}
如果我改变这条线
var cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encryptedTicket) { Expires = DateTime.Now.AddMinutes(30) };
至
var cookie = new HttpCookie("test", "testing") { Expires = DateTime.Now.AddMinutes(30) };
然后“测试”cookie 将按预期运行,我可以在 Global.asax 中获取它Application_PostAuthenticateRequest