【问题标题】:Different result while reading the FormsAuthenticationTicket读取 FormsAuthenticationTicket 时结果不同
【发布时间】:2015-01-21 12:31:18
【问题描述】:

我有两个代码块,它们应该做同样的工作,即复制整个 FormsAuthenticationTicket 并更改其中存储在 UserData 中的一位。

第一个代码正确读取包括UserData 在内的所有内容。第二个不包括UserData。它只是返回一个空字符串。我意识到当一个异常被抛出是因为如果一个空对象。

有什么想法吗?

第一个代码:

string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = HttpContext.Request.Cookies[cookieName];
if (authCookie != null)
{
    FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(authCookie.Value);
    UserData userDataObj = JsonConvert.DeserializeObject<UserData>(oldTicket.UserData);
    userDataObj.PassChangeRequired = user.PasswordChangeRequired;
    string userdata = JsonConvert.SerializeObject(userDataObj);
    FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
                                                oldTicket.Version,
                                                oldTicket.Name,
                                                oldTicket.IssueDate,
                                                oldTicket.Expiration,
                                                oldTicket.IsPersistent,
                                                userdata,
                                                oldTicket.CookiePath);
    authCookie.Value = FormsAuthentication.Encrypt(newTicket);
    Response.Cookies.Set(authCookie);
}

第二个代码:

HttpCookie authCookie = FormsAuthentication.GetAuthCookie(user.UserName, false);
if (authCookie != null)
{
    FormsAuthenticationTicket oldTicket = FormsAuthentication.Decrypt(authCookie.Value);
    UserData userDataObj = JsonConvert.DeserializeObject<UserData>(oldTicket.UserData);
    userDataObj.PassChangeRequired = user.PasswordChangeRequired;
    string userdata = JsonConvert.SerializeObject(userDataObj);
    FormsAuthenticationTicket newTicket = new FormsAuthenticationTicket(
                                                oldTicket.Version,
                                                oldTicket.Name,
                                                oldTicket.IssueDate,
                                                oldTicket.Expiration,
                                                oldTicket.IsPersistent,
                                                userdata,
                                                oldTicket.CookiePath);
    authCookie.Value = FormsAuthentication.Encrypt(newTicket);
    Response.Cookies.Set(authCookie);
}

【问题讨论】:

    标签: asp.net-mvc forms-authentication formsauthentication formsauthenticationticket


    【解决方案1】:

    如果您查看示例 2 中使用的 MSDN for the GetAuthCookie() 方法,您会看到它说:

    为给定的用户名创建一个身份验证 cookie。

    这意味着当您在示例 2 中进行此调用时,您实际上得到的是刚刚创建的全新身份验证 cookie,而不是您已经设置的那个。这就是UserData 属性为空/null 的原因。

    【讨论】:

      猜你喜欢
      • 2011-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-21
      • 1970-01-01
      • 1970-01-01
      • 2019-02-08
      相关资源
      最近更新 更多