3

我有一个 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

4

0 回答 0