Asp.net encryptedTicket参数的值无效
我最近修改了我公司eComm网站的登录名,使其具有“让我登录”功能。主要更改是使表单身份验证cookie对这些用户保持不变 发布更改后,我开始在日志中看到此异常:Asp.net encryptedTicket参数的值无效,asp.net,.net,asp.net-mvc,iis,webforms,Asp.net,.net,Asp.net Mvc,Iis,Webforms,我最近修改了我公司eComm网站的登录名,使其具有“让我登录”功能。主要更改是使表单身份验证cookie对这些用户保持不变 发布更改后,我开始在日志中看到此异常: Invalid value for 'encryptedTicket' parameter at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket) 问题似乎是特定于用户代理的。记录错误的唯一用户代理是: Mozilla/5.0(iPad;
Invalid value for 'encryptedTicket' parameter
at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)
问题似乎是特定于用户代理的。记录错误的唯一用户代理是:
- Mozilla/5.0(iPad;U;CPU操作系统4_3_3,如Mac OS X;en-us)AppleWebKit/533.17.9(KHTML,如Gecko)版本/5.0.2 Mobile/8J2 Safari/6533.18.5
- 电子标签标识符/1.0
有人知道这里发生了什么吗?如果将无效字符串传递给
System.Web.Security.FormsAuthentication.Decrypt
,就会发生这种情况。最常见的是它试图传入cookieName
而不是cookieValue
以下是获取ASPXAUTH cookie值+信息的方法:
string authCookieValue = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName].Value;
var cookieInfo = System.Web.Security.FormsAuthentication.Decrypt(authCookieValue);
我遇到了同样的问题,这是因为我得到了authCookieValue的null或空值。因此,我的建议是,您必须检查HttpCookie的null,以及它的值,如下所示
HttpCookie authCookie = System.Web.HttpContext.Current.Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
//Extract the forms authentication cookie
if (!string.IsNullOrEmpty(authCookie.Value))
{
FormsAuthenticationTicket authTicket = FormsAuthentication.Decrypt(authCookie.Value);
string email = authTicket.UserData;
// and now process your code as per your condition
}
}
这肯定会对您有所帮助。我发现,由于某些原因,cookie可能会得到不一致的值。在某些情况下,对我们来说,这只是一些用户 我建议在发生argumentexception时让用户注销,这比引发错误要好。它没有解释“为什么”,不是完全令人满意(在某些方面,“记住我”对某些用户不起作用…),但至少它可以保持用户的正常行为 在global.asax中:
protected void Application_PostAuthenticateRequest(object sender, EventArgs e)
{
HttpCookie authCookie = Request.Cookies[FormsAuthentication.FormsCookieName];
if (authCookie != null)
{
try
{
var authTicket = FormsAuthentication.Decrypt(authCookie.Value);
//...
//setting user properties with cookie...
//...
}
catch (ArgumentException ex)
{
FormsAuthentication.SignOut();
Response.Redirect("/");
}
}
}
甚至不确定是否需要重定向(必须检查)
希望这有帮助当您尝试反序列化的票证长度太长时,您可能会出现相同的错误对此有任何进一步的发现吗?您应该记录“encryptedTicket”传递给Decrypt方法的值。我刚刚收到大量错误,但是我的代码实际上和你的代码一样。@Brad Hay你得到的是authCookie和authCookie吗?值为空??因此,您无法从Cookie中获取电子邮件。嗯,我没有进行第二次检查以确保
authCookie.Value
不为空。好电话@Dilip0165@Brad所以,如果您签入其他浏览器,您将获得值。我希望这个答案对你有用。@Brad我的答案对你有用吗?您无法从浏览器的cookie中获得价值。