ASP自定义窗体身份验证不起作用,因为cookie丢失

时间:2015-09-30 07:43:42

标签: asp.net-mvc cookies forms-authentication iprincipal

我有一个ASP .Net 4.5 MVC网站,我在this tutorial之后定制了表单身份验证。不同之处在于我通过后端dll进行身份验证,因此我跳过教程中的所有数据库内容,教程从数据库中获取用户,我从常规方法调用中获取它。 我之前已经按照本教程在新的MVC网站上成功实现了它。这次我在现有的MVC网站上实现了它,我无法让它工作。

当cookie添加到Response.Cookies时,它只存在,直到代码向用户返回View。之后Response.Cookies中不再存在,这意味着在Global.asax Application_PostAuthenticateRequest方法中,var authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];始终返回null。 我试图添加其他简单的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

0 个答案:

没有答案