我最近修改了我的公司eComm网站的登录信息,以便“保持登录状态”功能。主要的变化是使表单身份验证cookie对这些用户持久。
更改发布后,我开始在日志中看到此异常:
Invalid value for 'encryptedTicket' parameter
at System.Web.Security.FormsAuthentication.Decrypt(String encryptedTicket)
问题似乎是特定于用户代理。记录错误的唯一用户代理是:
Mozilla / 5.0(iPad; U; CPU OS 4_3_3,如Mac OS X; zh-CN)AppleWebKit / 533.17.9(KHTML,类似Gecko)版本/ 5.0.2 Mobile / 8J2 Safari / 6533.18.5
eTailInsights标记标识符/ 1.0
我的iPad配有上面列出的配置。第一次登录尝试有效。但是关闭浏览器并返回到站点,从而使用持久性cookie会导致错误。
不同环境的行为也不一致。它对我的本地机器和测试服务器工作正常,但生产失败。这使得排除故障变得困难。
其他版本的iOS / Safari可以正常登录。
搜索此错误导致多个references因Web表单和较新的浏览器版本出现问题。这似乎与我的场景不一致。我没有看到新浏览器的错误,我的网站是MVC。
我发现一个question与我的相似,但没有答案。
有人知道这里发生了什么吗?
答案 0 :(得分:10)
我遇到同样的问题,这是因为我获得了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
}
}
这肯定会对你有帮助。
答案 1 :(得分:2)
如果将无效字符串传递给System.Web.Security.FormsAuthentication.Decrypt
,则会发生这种情况。最常见的是尝试传递cookieName
而不是cookieValue
。
以下是获取ASPXAUTH cookie值+ info的方法:
string authCookieValue = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName].Value;
var cookieInfo = System.Web.Security.FormsAuthentication.Decrypt(authCookieValue);
答案 2 :(得分:1)
如果您尝试反序列化的故障单长度太长,则可能会出现同样的错误。
答案 3 :(得分:0)
我发现,由于某种原因,cookie可能会产生不一致的价值。在某些情况下,对我们来说只有一些用户。
比提出错误更好我只是建议在争论的情况下将用户注销。它并没有解释为什么"为什么"并不完全令人满意(在某些方面"记住我"赢得了为一些用户工作......)但是在至少它可以保持用户的正常行为。
在global.asax中:
using Microsoft.Win32.Interop;
...
...
try {
...
...
} catch (HttpListenerException e) {
if (e.ErrorCode == WinError.ERROR_OPERATION_ABORTED) {
// Do something
}
}
甚至不确定是否需要重定向(必须检查)。
希望这有帮助