2013-09-19 5 views
10

Недавно я изменил логин для моего сайта eComm, чтобы иметь функцию «Запомнить меня». Первичное изменение состояло в том, чтобы сделать cookie аутентификации форм постоянным для этих пользователей.Недопустимое значение для параметра encryptedTicket

После изменения было выпущено, я начал видеть этот exeception в моих журналах:

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; EN-US) AppleWebKit/533.17.9 (KHTML, как Gecko) Версия/5.0.2 Мобильные/8J2 Сафари/6533.18.5

  • eTailInsights Метка Идентификатор/1,0

у меня есть IPAD с конфигурацией, перечисленных выше. Первая попытка входа в систему работает. Но закрытие браузера и возвращение на сайт, поэтому использование постоянного файла cookie вызывает ошибку.

Поведение также несовместимо в разных средах. Он отлично работает на моем локальном компьютере и тестовом сервере, но не работает. Это затрудняет устранение неполадок.

Другие версии iOS/Safari могут быть в порядке.

При поиске этой ошибки возникли проблемы с использованием веб-форм и новых версий браузера. Однако это не похоже на мой сценарий. Я не вижу ошибок для новых браузеров, а мой сайт - MVC.

Я нашел один question похожий на мой, но без ответа.

Кто-нибудь знает, что здесь происходит?

+0

Любые дальнейшие открытия на этом? – Ted

+0

Вы должны зарегистрировать, что значение для «encryptedTicket» передано методу Decrypt. –

ответ

1

Это происходит, если вы передаете недопустимую строку в System.Web.Security.FormsAuthentication.Decrypt. Чаще всего он пытается пройти в cookieName вместо cookieValue.

Ниже путь, чтобы получить печенье значение ASPXAUTH + информация:

string authCookieValue = HttpContext.Request.Cookies[FormsAuthentication.FormsCookieName].Value; 
var cookieInfo = System.Web.Security.FormsAuthentication.Decrypt(authCookieValue); 
8

я столкнулся такая же проблема, это потому, что я получаю нулевой или пустое значение authCookieValue. Поэтому мое предложение состоит в том, что вам нужно проверить значение null для HttpCookie, а также за его значение, как указано ниже.

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 

      } 
     } 

Это определенно поможет вам.

+0

Я просто получил поток этих ошибок, но мой код практически такой же, как у вас. – Brad

+0

@Brad Hay вы получаете authCookie и authCookie.Value is null? так что вы не могли получать электронную почту из своих файлов cookie. – Dilip0165

+1

hm, я не делал второй чек, чтобы убедиться, что 'authCookie.Value' не является нулевым. хороший звонок, @ Dilip0165 – Brad

0

Я обнаружил, что по какой-то причине cookie может получить несогласованное значение. Для нас это были только некоторые пользователи, в некоторых ситуациях.

Лучше, чем поднимать ошибку, я просто предлагаю зарегистрировать пользователя в случае возникновения аргумента. Он не объясняет «почему», не полностью удовлетворяет (в некотором смысле «запомнить меня» не будет работать для некоторых пользователей ...), но, по крайней мере, он может поддерживать нормальное поведение для пользователя.

В глобальном масштабе.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("/"); 
      } 
     } 
    } 

Не уверен, что перенаправление необходимо (нужно было бы проверить).

Надеется, что это помогает

0

Вы могли бы иметь ту же ошибку, когда длина билета вы пытаетесь десериализациями является слишком долго.

Смежные вопросы