Você confirmou que a chave da máquina está funcionando? Uma maneira de fazer isso é se você tiver autenticação de formulários, pode ter algumas linhas de código que tentam ler o cookie de autenticação. Se a chave da máquina for inválida, você não poderá ler o cookie e User.Identity.IsAuthenticated será falso. A chave da máquina também é necessária para o estado da sessão SQL, portanto, esse é o principal suspeito.
Algum código de exemplo abaixo.
Se você tiver sua chave em machine.config (em vez de web.config), talvez queira verificar se atualizou o arquivo correto. Se você tiver o .NET 3 e 4, poderá ter um arquivo machine.config em quatro locais. Eu costumo atualizar todos os quatro só para ter certeza.
C: \ Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ CONFIG \
C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Config \
C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ Config \
C: \ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Config \
Outra possibilidade remota é que você também queira especificar a propriedade validation="xxxx" para o algoritmo hash de chave de máquina. No .NET4, o algoritmo de hashing padrão é SHA256, mas nas versões anteriores era SHA1. Por isso, geralmente é uma boa ideia incluir isso para que todos sejam iguais.
Quebrar Alterações do ASP.NET 4 - Algoritmo de Hashing Padrão Agora é HMACSHA256
Provedor de configuração protegido. Compartilhar a chave da máquina em um farm da web só funciona com o RsaProtectedConfigurationProvider. Se o web.config ou machine.config especificar apenas o DpapiProtectedConfigurationProvider, ele não funcionará:
Especificando um provedor de configuração protegido
link
Exemplo de código de validação de cookies:
if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
{
try
{
FormsAuthenticationTicket ticket = FormsAuthentication.Decrypt(Request.Cookies[FormsAuthentication.FormsCookieName].Value);
Debug.WriteLine(String.Format("Cookie timeout: {0}, ticket.Expiration.ToString("yyyy-MMM-dd HH:mm:ss")));
}
catch (Exception e)
{
Debug.WriteLine(String.Format("Error reading cookie: {0}", e.ToString()));
}
}
else
{
Debug.WriteLine("Cookie unavailable");
}