none
Problemas com valores passados para variaveis static entre class no servidor RRS feed

  • Pergunta

  • Bom dia pessoal.

    Estou sofrendo atualmente com um problema e não consigo encontrar a solução.
    Tenho um sistema de login em ASP.NET C# quando faço a autenticação tudo ocorre corretamente só que ai que está o problema eu preciso pegar o valor de ID do meu banco de dados partir do usuário que foi autenticado ali pela aquela vez até que o método que utilizo funciona, eu repasso o valor do ID capturado no momento do login para uma variável public static em uma class e ele me redireciona para a tela de inicio que é o correto com o valor na variável.. e ai o problema acontece, essa variável não guarda o valor para o computador do cliente e sim no servidor então quando alguém faz o Login no site todas as pessoas que acessarem este site estará logada automaticamente neste login tudo isso por conta da variável static na class alguém sabe como resolvo está situação que está em comendo o juízo.

    Agradeço desde de já!! Kennedy

    Na minha class Global
     public static int Cod_Login;


    minha validação de login
    DataSet DS = new DataSet();
    DS = ValidaLogin(TxtUsuario.Text, TxtSenha.Text);
    for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
     {
     Cod_User = Convert.ToInt32(DS.Tables[0].Rows[i][0] == DBNull.Value ? 0 : DS.Tables[0].Rows[i][0]);
                        }

                        if (Cod_User != 0)
                        {
                            Class_Global.Cod_Login = Cod_User; //aonde passo o valor para a variavel
                            Response.Redirect("/Default.aspx");
                        }
                        else
                        {
                            LblMsg.Text = "CPF e/ou Senha incorretos.";
                            LblMsg.Visible = true;
                        }


    Na minha pagina de inicio apos o login
    if (Class_Global.Cod_Login != 0)
                    {

    //aqui utilizo se o meu código caso for o valor diferente de zero

    }


    sexta-feira, 10 de agosto de 2018 06:01

Todas as Respostas

  • Kennedy,

    Se você utilizar static esse é o comportamento esperado. A instância é única para todos os usuários. Você terá que mudar sua abordagem.

    1. Como vc tem um sistema próprio de login a sugestão que acredito ser mais fácil é armazenar os dados da sessão por Cookies, dessa forma as informações ficam no lado do usuário.

    Sou uma pessoa que constantemente insisto para as pessoas não desenvolverem sistemas de login. Existem diversas frameworks que fazem isso, com muito menos esforço e te conduz por caminhos mais seguro tanto em código como por problemas como esse.

    Segue algumas outras abordagens

    ASP.NET Core 2.1 com IdentityServer4


    Adding ASP.NET Identity to an Empty or Existing Web Forms Project


    Espero ter ajudado! Se consegui, não esquece de marcar no fórum como útil! Obrigado :)
    #fullstack dev - MCSA, MCTS and actually blogging at www.saindodacaixinha.com.br

    sexta-feira, 10 de agosto de 2018 11:38
  • Kennedy,

    Utilize sessão.

    Exemplo:

    DataSet DS = new DataSet();
    DS = ValidaLogin(TxtUsuario.Text, TxtSenha.Text);
    
    for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
    {
    	Cod_User = Convert.ToInt32(DS.Tables[0].Rows[i][0] == DBNull.Value ? 0 : DS.Tables[0].Rows[i][0]);
    }
    
    if (Cod_User != 0)
    {
    	Session["Cod_User"] = Cod_User; 
    	Response.Redirect("/Default.aspx");
    }
    else
    {
    	LblMsg.Text = "CPF e/ou Senha incorretos.";
    	LblMsg.Visible = true;
    }
    
    
    Na minha pagina de inicio apos o login
    if (Session["Cod_User"] != 0)
    {
    	//aqui utilizo se o meu código caso for o valor diferente de zero
    }


    Carlos Eduardo Ferreira

    sexta-feira, 10 de agosto de 2018 13:01