FormAuthentication .ASPXAUTH cookie在ASP.NET MVC中显示null

时间:2017-08-20 15:45:37

标签: c# asp.net-mvc

我已经在asp.net mvc 5中实现了FormAuthentication并在LogIn上创建了FormsAuthenticationticket并且它成功创建但是片刻之后,cookie在浏览器中显示但在应用程序中它变为空。

请帮助解决此问题。

任何帮助将不胜感激

登录表格

  public ActionResult Login([Bind(Include = "Username, Password")] LoginModel loginModel, string ReturnUrl)
    {
        if (ModelState.IsValid)
        {
            Egov_Users eGov_Users = db.Egov_Users
                .Where(p => p.UserType.Type != "O" && p.UserName == loginModel.Username)
                .FirstOrDefault();

            if (eGov_Users == null)
            {
                ModelState.AddModelError("", "Invalid username");
                return View();
            }
            else
            {
                if (eGov_Users.Password != loginModel.Password)
                {
                    ModelState.AddModelError("", "Invalid Password");
                    return View();
                }

                var loginDetail = new LoginDetails();
                var serializer = new JavaScriptSerializer();

                loginDetail.userID = eGov_Users.UserId;
                loginDetail.username = eGov_Users.UserName;
                loginDetail.firstName = eGov_Users.FirstName;
                loginDetail.lastName = eGov_Users.LastName;

                var userData = SerializeUserInfoInternal(loginDetail);

                FormsAuthentication.SetAuthCookie(loginDetail.username, false);

                var cookie = FormsAuthentication.GetAuthCookie(
                           FormsAuthentication.FormsCookieName, false);

                var ticket = FormsAuthentication.Decrypt(cookie.Value);

                var durationInHours = 8;
                FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
                    ticket.Version,
                    loginDetail.username,
                    DateTime.Now,
                      DateTime.Now.AddHours(durationInHours),
                    true,
                    userData);

                // Encrypt the ticket.
                string encTicket = FormsAuthentication.Encrypt(newTicket);

                cookie.Value = encTicket;
                Response.Cookies.Add(cookie);

                int cookieSize = System.Text.UTF8Encoding.UTF8.GetByteCount(cookie.Values.ToString());
                Session["CookieSize"] = cookieSize;
                if (string.IsNullOrEmpty(ReturnUrl))
                {
                    return RedirectToAction("Index", "Users");
                }
            }
        }

        return RedirectToAction("Login", "Login");
    }

GLOBAL ASAX

 protected void Application_PostAuthenticateRequest()
    {
        var ticket = GetTicketFromCurrentCookie();
        if (ticket == null)
        {
            Global.WriteLog("Application_PostAuthenticateRequest", "ticket becomes null");
            return;
        }
        var user = DeserializeUserInfoInternal(ticket.Name, ticket.UserData);
        if (user == null)
        {
            return;
        }
        var principal = new AppUserPrincipal(user);
        HttpContext.Current.User = principal;
    }
    private static FormsAuthenticationTicket GetTicketFromCurrentCookie()
    {
        var cookie = HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];

        if (cookie == null)
        {
            Global.WriteLog("GetTicketFromCurrentCookie", "Cookie becomes null");
            return null;
        }

        var ticket = FormsAuthentication.Decrypt(cookie.Value);
        return ticket;
    }
    static LoginDetails DeserializeUserInfoInternal(string name, string userData)
    {
        var deserialize = new JavaScriptSerializer();

        var loginDetails = deserialize.Deserialize<LoginDetails>(userData);

        return loginDetails;
    }

1 个答案:

答案 0 :(得分:0)

使用以下代码获取Cookie值

HttpContext.Current.Request.Cookies.Get(".ASPXAUTH");