使用FormsAuthenticationTicket进行ASP.NET MVC身份验证(可能是)

使用FormsAuthenticationTicket进行ASP.NET MVC身份验证(可能是),asp.net,asp.net-mvc,authentication,asp.net-mvc-4,Asp.net,Asp.net Mvc,Authentication,Asp.net Mvc 4,我是一个PHP爱好者,但我正在ASP.NETMVC4中创建一个登录页面。我希望在会话中存储用户的ID、用户名和角色。到目前为止,我正在做的事情如下。如果我是正确的,它会用用户名保存cookie [HttpPost] public ActionResult Login(Models.UserLoginModel user) { if (ModelState.IsValid) { Models.User u = new Mode

我是一个PHP爱好者,但我正在ASP.NETMVC4中创建一个登录页面。我希望在会话中存储用户的ID、用户名和角色。到目前为止,我正在做的事情如下。如果我是正确的,它会用用户名保存cookie

[HttpPost]
    public ActionResult Login(Models.UserLoginModel user)
    {
        if (ModelState.IsValid)
        {
            Models.User u = new Models.User();
            if (u.IsValid(user.Username, user.Password))
            {
                FormsAuthentication.SetAuthCookie(user.Username, user.RememberMe);

                return RedirectToAction("Index", "Accounts");
            }
            else
            {
                ModelState.AddModelError("", "Login data is incorrect!");
            }
        }
        return View(user);
    }
我的兴趣是存储更多信息并控制验证时间。有人建议我使用
验证票
课程。我替换了
FormsAuthentication.SetAuthCookie(user.Username,user.RememberMe)带有

FormsAuthenticationTicket ticket = new FormsAuthenticationTicket
(
    1, 
    user.Username, 
    DateTime.Now, 
    DateTime.Now.AddMinutes(30), 
    false, 
    "Some User Data", 
    FormsAuthentication.FormsCookiePath
);
Response.Cookies.Add
(
    new HttpCookie
    (
        FormsAuthentication.FormsCookieName, 
        FormsAuthentication.Encrypt(ticket)
    )
);
它看起来很酷,但我没有测试它,具有灵活性。但问题是我怎样才能得到这些信息

如何获取这些信息并确定用户是否已登录,以及保存在
FormsAuthenticationTicket
中的其他必要信息


提前谢谢。

就像您想要任何票一样:

var cookie = Request.Cookies[FormsAuthentication.FormsCookieName];
var ticketInfo = FormsAuthentication.Decrypt(cookie.Value);

由于它是一个安全票证,如果您不需要从客户端JavaScript访问信息,也可以将HttpOnly设置为true。这意味着cookie只能在服务器上访问。

此外,如果您对在ASP.NET MVC中创建自定义登录表单有任何意见,我将不胜感激。再次感谢!