代码之家  ›  专栏  ›  技术社区  ›  netwire

asp.net mvc身份验证cookie问题

  •  2
  • netwire  · 技术社区  · 14 年前

    Web.config:

        <authentication mode="Forms">
            <forms loginUrl="/Account/Login" defaultUrl="/Home/MyAccount" timeout="43200"/>
        </authentication>
    

    持久化cookie的代码:

    public void SignIn(string userName, bool createPersistentCookie) {
        int timeout = createPersistentCookie ? 525600 : 120; // Timeout in minutes, 525600 = 365 days.
        FormsAuthenticationTicket ticket = new FormsAuthenticationTicket(userName, createPersistentCookie, timeout);
        string encrypted = FormsAuthentication.Encrypt(ticket);
        HttpCookie cookie = new HttpCookie(FormsAuthentication.FormsCookieName, encrypted);
        cookie.Expires = System.DateTime.Now.AddMinutes(timeout);
    
        HttpContext.Current.Response.Cookies.Add(cookie);
        FormsAuthentication.SetAuthCookie(userName, createPersistentCookie);
    }
    

    检索cookie的代码:

            if (System.Web.HttpContext.Current.Request.Cookies.AllKeys.Contains(FormsAuthentication.FormsCookieName)) {
                cookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
            }
    

    当前代码检查会话的身份验证。我还想添加从cookie获取用户名的功能。我有两个问题:

    1. 如何解密cookie以获取用户名?
    1 回复  |  直到 6 年前
        1
  •  6
  •   PatrickSteele    14 年前

    要得到饼干:

    HttpCookie cookie = HttpContext.Current.Request.Cookies.Get(FormsAuthentication.FormsCookieName);
    

    用以下方法解密:

    FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(cookie.Value);
    var userName = ticket.UserData