首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >读取FormsAuthenticationTicket时的不同结果

读取FormsAuthenticationTicket时的不同结果
EN

Stack Overflow用户
提问于 2015-01-21 12:31:18
回答 1查看 343关注 0票数 0

我有两个代码块,它们应该完成相同的工作,即复制整个FormsAuthenticationTicket,并更改存储在UserData中的一部分代码。

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

有什么想法吗?

第一个代码:

代码语言:javascript
运行
复制
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);
}

第二个代码:

代码语言:javascript
运行
复制
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);
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-01-21 16:06:47

如果您查看示例2中使用的用于GetAuthCookie()的MSDN方法,您将看到它是这样的:

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

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

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28067326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档