读取 FormsAuthenticationTicket 时的不同结果
Different result while reading the FormsAuthenticationTicket
我有两个代码块应该做同样的工作,即复制整个 FormsAuthenticationTicket
并更改其中存储在 UserData
.[=16 中的一位=]
第一个代码正确读取了所有内容,包括 UserData
。第二个不包括 UserData
。它只是 returns 一个空字符串。我意识到当抛出异常时,因为如果一个空对象。
有什么想法吗?
第一个代码:
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);
}
如果您查看示例 2 中使用的 MSDN for the GetAuthCookie() 方法,您会看到它说:
Creates an authentication cookie for a given user name.
这意味着当您在示例 2 中进行此调用时,您实际上取回了一个刚刚创建的全新身份验证 cookie,而不是您已经设置的那个。这就是为什么 UserData
属性 是 empty/null.
我有两个代码块应该做同样的工作,即复制整个 FormsAuthenticationTicket
并更改其中存储在 UserData
.[=16 中的一位=]
第一个代码正确读取了所有内容,包括 UserData
。第二个不包括 UserData
。它只是 returns 一个空字符串。我意识到当抛出异常时,因为如果一个空对象。
有什么想法吗?
第一个代码:
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);
}
如果您查看示例 2 中使用的 MSDN for the GetAuthCookie() 方法,您会看到它说:
Creates an authentication cookie for a given user name.
这意味着当您在示例 2 中进行此调用时,您实际上取回了一个刚刚创建的全新身份验证 cookie,而不是您已经设置的那个。这就是为什么 UserData
属性 是 empty/null.