我有两个代码块,它们应该完成相同的工作,即复制整个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);
}
发布于 2015-01-21 16:06:47
如果您查看示例2中使用的用于GetAuthCookie()的MSDN方法,您将看到它是这样的:
为给定的用户名创建身份验证cookie。
这意味着,当您在示例2中进行此调用时,实际上是要返回刚刚创建的全新身份验证cookie,而不是您已经设置的cookie。这就是为什么UserData
属性为空/空的原因。
https://stackoverflow.com/questions/28067326
复制相似问题