Por que o cookie ASP.NET FormsAuthentication não está autenticando o usuário?

Tenho um site que usa o SqlMembershipProvider e o FormsAuthentication padrão. Posso usar os Controles de Login internos e / ou chamar programaticamente todos os métodos para autenticar um usuário e obter o mesmo resultado - o usuário é autenticado e um cookie é criado, mas o cookie não parece ser válido, pois eu posso ' não entre em nenhuma página que exija autenticação.

Não existe um código real a ser mostrado para o Controle de Login padrão, pois ele deve "funcionar", mas aqui está o código personalizado que eu tentei:

protected void ctrlLogin_Authenticate(object sender, AuthenticateEventArgs e)
{
   if (Membership.ValidateUser(ctrlLogin.UserName, ctrlLogin.Password))
   {
      FormsAuthentication.RedirectFromLoginPage(ctrlLogin.UserName, ctrlLogin.RememberMeSet);
      /*
       * I also tried this:
      FormsAuthentication.SetAuthCookie(ctrlLogin.UserName, ctrlLogin.RememberMeSet);
      if (!String.IsNullOrEmpty(Request.QueryString["ReturnUrl"]))
         Response.Redirect(Request.QueryString["ReturnUrl"]);
      Response.Redirect("/index.aspx");
       */
   }
   else
   {
      ctrlLogin.FailureText = "Invalid Username/Password Combination";
   }
}

Com esse código, Membership.ValidateUser () é bem-sucedido, e ambos FormsAuthentication.RedirectFromLoginPage () e FormsAuthentication.RedirectFromLoginPage () definiu com êxito um cookie - esse cookie simplesmente não funciona para verificar minha autenticação. Confirmei isso excluindo todos os meus cookies e vendo-os serem criados novamente com o FireCookie. O nome do cookie corresponde ao que eu tenho no meu web.config, o domínio é "/" e a data de validade é a esperada (veja abaixo).

Aqui estão as seções relevantes do meu web.config:

<authentication mode="Forms">
  <forms loginUrl="~/login/index.aspx" name=".SoeAuth" protection="All"
    slidingExpiration="true" timeout="525599" domain=""></forms>
</authentication>
<membership defaultProvider="SqlMembershipProvider">
  <providers>
    <add connectionStringName="[MY_CS]" applicationName="[MY_APPNAME]"
      minRequiredPasswordLength="6" minRequiredNonalphanumericCharacters="0"
      enablePasswordReset="true" passwordFormat="Hashed" requiresUniqueEmail="true"
      name="SqlMembershipProvider" type="System.Web.Security.SqlMembershipProvider"
      requiresQuestionAndAnswer="false"/>
  </providers>
</membership>

Note-se que eu também adicionei uma entrada machineKey no meu arquivo web.config com base em uma sugestão de uma pergunta muito semelhante aqui (que não resolveu meu problema). Além disso, para referência, o tempo limite = 525599 acima é de 1 minuto a menos de um ano para meus cookies persistentes.

questionAnswers(1)

yourAnswerToTheQuestion