Sessões Asp.net sendo cruzadas / misturadas

Algumas semanas atrás, um de nossos clientes entrou em contato conosco dizendo que, às vezes, quando ele cria uma atividade, ela é criada com o nome de outra pessoa!

Fizemos uma solução de problemas e não conseguimos encontrar nada. Pedimos que o usuário entre em contato conosco na próxima vez em que estiver enfrentando esses problemas. Ele nos contatou e pudemos conversar com ele e ver o problema com nossos próprios olho

Não foram apenas as atividades, ele foi reconhecido como outra pessoa no aplicativo. Ele tinha acesso a tudo o que outra pessoa deveria ter acesso. Foi quando percebemos que estávamos tendo um problema de sessão misturada.

Um pouco sobre o nosso código:
Como qualquer outro aplicativo, temos uma página de login simples que o usuário digita e-mail e senha e os autenticamos em nosso banco de dados e, se eles são válidos, chamamos FormsAuthentication.SetAuthCookie () para salvar o ID do usuário atual no cookie e o deixamos entrar.

BL.User currentUser = BL.User.Authenticate(txtUsername.Text, txtPassword.Text);

if (currentUser != null)
{
    this.Session["NumberOfLoginTried"] = "0";
    FormsAuthentication.SetAuthCookie(currentUser.UserID.ToString(), chRememberMe.Checked);
    Response.Redirect(FormsAuthentication.GetRedirectUrl(currentUser.UserID.ToString(), false));
}

Também usamos o seguinte trecho de código para obter o ID do usuário conectado (usuário atual) em nosso aplicativ

public static int GetCurrentUserID()
{
    int userID = -1;
    int.TryParse(HttpContext.Current.User.Identity.Name, out userID);
    return userID;
}

E sim, fizemos nossa lição de casa, pesquisamos no Google e vimos os dois links a seguir:

http: //lionsden.co.il/codeden/? p = 446
Mistura de sessão do ASP.NET usando StateServer (SCARY!)

Desativamos o cache no modo kernel e no modo usuário para arquivos .aspx e .ascx, e isso ainda está acontecend

PS - O aplicativo está sendo executado no Windows 2008 R2 com o IIS 7.5. E nós somos usando sessão sem cozinhar.

questionAnswers(7)

yourAnswerToTheQuestion