【问题标题】:FormsAuthenticationTicket.Version returns invalid version numberFormsAuthenticationTicket.Version 返回无效的版本号
【发布时间】:2011-03-08 22:58:00
【问题描述】:

FormsAuthenticationTicket 的版本号是否有大小/数量限制。

我尝试使用表单身份验证创建一个带有大版本号的 ASP.NET cookie(例如:1234567 需要此号码用于识别目的)。但是当我解密 cookie 时,我得到 135 作为版本号。

为了添加新信息,最初删除了旧的表单身份验证 cookie。

Response.Cookies.Remove(FormsAuthentication.FormsCookieName);

以下是我用来创建 FormsAuthentication cookie 的代码。

FormsAuthenticationTicket newAuthTicket = new FormsAuthenticationTicket(1234567, un, DateTime.Now, DateTime.Now.AddHours(5F), false, user_data);
HttpCookie newauthCookie = new HttpCookie(FormsAuthentication.FormsCookieName, FormsAuthentication.Encrypt(newAuthTicket));

Response.Cookies.Add(newauthCookie);

检索cookie后,我得到的版本号是135。这个数字因版本号不同而不同。

string cookieName = FormsAuthentication.FormsCookieName;
HttpCookie authCookie = Context.Request.Cookies[cookieName];

if (authCookie == null)
{
    return;
}

FormsAuthenticationTicket authTkt = null;
authTkt = FormsAuthentication.Decrypt(authCookie.Value);

if (authTkt == null)
{
    return;
}
int versionID = authTkt.Version;

有人可以告诉我使用这么大的版本号是不是一个坏主意,还是我在这方面遗漏了什么。

感谢您的帮助, 维杰

【问题讨论】:

  • 为什么要在版本中存储识别信息?你不能对UserData做同样的事情吗?
  • @Daniel:我还有其他用户数据存储在 cookie 的 UserData 部分中。但是我仍然不明白为什么在 VersionID 属性应该能够采用 Int 值时更改值。是的,我确实在 asp.net 论坛上发布了它,希望得到不同的建议。 :)
  • 为什么不能放到userdata中?
  • 为了让事情变得复杂,我的最后一个选择是将标识信息与其他附加用户数据一起存储在用户数据中。但是解密时版本号的值发生变化的原因是什么?这是一个已知的错误吗?

标签: c# .net asp.net forms-authentication


【解决方案1】:

确保票证名称未作为 null 传递。

【讨论】:

  • 票名肯定有值。
猜你喜欢
  • 1970-01-01
  • 2011-01-15
  • 2021-01-10
  • 1970-01-01
  • 1970-01-01
  • 2020-02-01
  • 2017-08-17
  • 2016-08-09
相关资源
最近更新 更多