none
Trabalhando com Sessão Asp.Net RRS feed

  • Pergunta

  • Tenho um sistema desenvolvido em ASP.NET C#, o mesmo é configurado no IIS e está funcionando perfeitamente, porém acontece o seguinte, eu acesso um banco pelo sistema, e um outro usuário vai acessar o outro banco, isto em equipamentos distintos, porém as sessões se misturam, e acaba que troca o banco. Exemplo, o primeiro usuário, acessa o banco 1, no caso o outro usuário, acessa o banco 2, então o primeiro usuário, começa a acessar o banco 2. Como posso consertar este problema? Ele já tem sessões, porém ele só verifica se ela é válida. Qual é a melhor forma?
    sexta-feira, 2 de fevereiro de 2018 11:04

Respostas

  • Mariana, então acredito que o problema pode ser esse.

    Invés de deixar isso numa variável tente utilizar na Página Inicial no momento de atribuir o valor de empresa dessa forma:

    Session["empresa"] = empresa;
    E na sua função use assim:
    public static SqlConnection AbreBanco() 
    { 
        System.IO.StreamReader arquivo = new System.IO.StreamReader(@"C:\web\configurador.txt"); string linha = ""; 
        while (true) 
        { 
            linha = arquivo.ReadLine(); 
            if (linha != null) 
            { 
                string host = linha; 
                string usuario = "banco"; 
                string senha = "123123"; 
                string banco = "a" + Session["empresa"].ToString(); 
                try 
                { 
                    SqlConnection conexao = new SqlConnection("Data Source=192.168.0.3,220;DATABASE=" + banco + ";UID=" + usuario + "; PWD=" + senha + "; Min Pool Size=5;Max Pool Size=250; Connect Timeout=3;");
                    conexao.Open(); 
                    return conexao; 
                } 
                catch 
                { 
                    HttpContext.Current.Response.Redirect("NaoCliente.aspx"); 
                } 
            } 
            else break; 
        } 
    
        return null; 
    }


    Att, Lucio Rogerio


    Espero ter ajudado, se ajudei, por favor Vote como Útil, e se resolvi seu problema, clique em Marcar como Resposta.

    sexta-feira, 2 de fevereiro de 2018 12:51
  • Se a classe estiver no projeto web, use 
    HttpContext.Current.Session["empresa"]

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 2 de fevereiro de 2018 17:17

Todas as Respostas

  • Bom dia Lucio, não utilizamos o webconfig, a conexão é feita através de um arquivo txt. 

    Ele não derruba a sessão, ele mistura as sessões. Não sei como proceder. Obrigado.

    sexta-feira, 2 de fevereiro de 2018 11:52
  • Como que você controla a conexão de cada usuário? Digo, onde você armazena a string de conexão?



    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 2 de fevereiro de 2018 11:55
  • Bom dia Juliano, utilizo uma classe, com o método AbreConexão();

    public static SqlConnection AbreBanco() 
    { 
        System.IO.StreamReader arquivo = new System.IO.StreamReader(@"C:\web\configurador.txt"); string linha = ""; 
        while (true) 
        { 
            linha = arquivo.ReadLine(); 
            if (linha != null) 
            { 
                string host = linha; 
                string usuario = "banco"; 
                string senha = "123123"; 
                string banco = "a" + empresa; 
                try 
                { 
                    SqlConnection conexao = new SqlConnection("Data Source=192.168.0.3,220;DATABASE=" + banco + ";UID=" + usuario + "; PWD=" + senha + "; Min Pool Size=5;Max Pool Size=250; Connect Timeout=3;");
                    conexao.Open(); 
                    return conexao; 
                } 
                catch 
                { 
                    HttpContext.Current.Response.Redirect("NaoCliente.aspx"); 
                } 
            } 
            else break; 
        } 
    
        return null; 
    }

    E quando vou abrir a conexão utilizo o nome da classe, e o nome do método. 

    clsdb.AbreConexao();

    Desta forma. Obrigado.

    sexta-feira, 2 de fevereiro de 2018 11:57
  • Mas como você diferencia a conexão de cada usuário se o TXT parece ser o mesmo?

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 2 de fevereiro de 2018 12:29
  • O nome do banco digitado é diferente, ele passa o nome do banco, e o identificador e a senha. 

    O campo banco, é um txt solicitado no login da página. 

    sexta-feira, 2 de fevereiro de 2018 12:31
  • A variável empresa, vem do txt da pagina inicial, que é o nome do banco que é passado no início.
    sexta-feira, 2 de fevereiro de 2018 12:38
  • Não estou entendendo muito bem, Mariana. A linha abaixo você deixou fixa no código acima apenas para exemplo?

    System.IO.StreamReader arquivo = new System.IO.StreamReader(@"C:\web\configurador.txt"); string linha = ""; 

    Outra coisa, você diz que o campo banco é um txt solicitado no login. Você se refere txt como sendo um input type=text ou um arquivo txt?

    Depois de lido no login, onde você armazena o nome do banco para as próximas conexões?


    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 2 de fevereiro de 2018 12:44
  • Sim, o arquivo existe, mais ainda não está sendo utilizado, a conexão está sendo passada dentro da classe.

    Na página default, que é a inicial do sistema, onde é digitado o nome do banco, o identificador e a senha, eu declaro o nome da classe clsdb:

     public clsdb banco = new clsdb();

    E no click do button entrar, eu preencho a variável com o txt:

     banco.Empresa = Empresa.Text;

    E esse é o html do Empresa.Text:

    <asp:TextBox ID="Empresa" class="form-control" runat="server" placeholder="Código da Empresa"></asp:TextBox>

    sexta-feira, 2 de fevereiro de 2018 12:50
  • Aí você joga esse objeto banco para a sessão depois de atribuir com as informações digitadas pelo usuário?

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 2 de fevereiro de 2018 12:56
  • Não, ele fica na classe, a sessão é somente para verificar se a sessão é válida ou não, não sou muito familiarizada com a sessão, na verdade é a primeira vez que eu trabalho com ela, sou novata na web. Então não consigo entender porque ele pega a sessão de outro usuário. Vou fazer o teste conforme o Lucio informou. 
    sexta-feira, 2 de fevereiro de 2018 12:58
  • Estou tentando fazer dessa forma Lucio, porém na class ele não reconhece o Session, eu verifiquei e todas as bibliotecas estão na class. Ela informa o erro: 

    Erro CS0103 O nome "Session" não existe no contexto atual

    sexta-feira, 2 de fevereiro de 2018 17:01
  • Se a classe estiver no projeto web, use 
    HttpContext.Current.Session["empresa"]

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    sexta-feira, 2 de fevereiro de 2018 17:17
  • Agora reconheceu, vou fazer o teste nesse fim de semana, e volto para informar se funcionou, ou se ainda ocorre o problema, por enquanto muito obrigado.
    sexta-feira, 2 de fevereiro de 2018 17:28
  • Eu fiz o teste, e aparentemente não ocorreu mais o problema, caso ocorra novamente eu abro uma nova pergunta, obrigado pela ajuda.
    segunda-feira, 5 de fevereiro de 2018 16:12
  • Show de bola. Qualquer coisa estamos aí.

    Juliano Nunes - http://linkedin.com/in/julianonunes

    Lembre-se de clicar em "Votar como útil" e "Marcar como Resposta" caso tenha respondido sua dúvida.

    Remember to "Vote as Helpful" and "Mark as Answer" if your question has been answered.

    segunda-feira, 5 de fevereiro de 2018 16:20