none
Perda de sessão ao excluir diretório RRS feed

  • Pergunta

  • Boa tarde pessoal,

    Estou precisando de uma luz. Vou resumir a história para entendimento do fato.

    Desenvolvi um sistema para upload de arquivos e imagens e cadastro de textos, que serão exibidos em um site. Ao realizar o upload, em um primeiro momento o arquivo é armazenado em um diretório temporário "tmp#", onde o # é o ID do usuário logado no sistema.

    Quando o cadastro do arquivo é efetivado, eu faço uma cópia do arquivo temporário e jogo no diretório final criado para o arquivo cadastrado. Como esse diretório "tmp#" ficará cheio de "lixo" no decorrer do tempo, quando o usuário faz login no sistema é executado um script para excluir esse diretório.

    É aí que o problema entra! Quando esse diretório existe e é excluído a sessão é perdida na mesma hora e o usuário precisa fazer o login novamente.

    Quando o diretório não existe a sessão permanesse e não ocorre nada de errado.

    O código de autenticação está assim:

     

    protected void Entrar(object sender, EventArgs e)
      {
        string login = txLogin.Text;
        string senha = txSenha.Text;
    
        if (string.IsNullOrEmpty(login))
        {
          Page.ClientScript.RegisterStartupScript(this.GetType(), "Alerta", "<script type='text/javascript'>alert('Informe o usuário!');</script>");
          txLogin.Focus();
        }
        else if (string.IsNullOrEmpty(senha))
        {
          Page.ClientScript.RegisterStartupScript(this.GetType(), "Alerta", "<script type='text/javascript'>alert('Informe a senha!');</script>");
          txSenha.Focus();
        }
        else
        {
          // * Recupera a string de conexão armazenada no arquivo web.config 
          ConnectionStringSettings getString = WebConfigurationManager.ConnectionStrings["conexao"] as ConnectionStringSettings;
          // * Inicia a classe Usuario
          Usuario usuario = new Usuario(getString.ConnectionString);
          // * Realizando a autenticação do usuário 
          usuario.autenticar(login, senha);
    
          // * Se retonar ID do usuário
          if (usuario.ID > 0)
          {
            // * Recupera os dados do usuário logado
            usuario.retornar(usuario.ID, "CON");
    
            // * Sessão contendo o ID do usuário
            Session.Add("IntranetUsuario", usuario.ID);
    
            // * Verifica se a data de expiração da senha do usuário é igual à corrente
            // * Se for expira a senha e impede o acesso
            if (DateTime.Now.Equals(usuario.DataExpiracao))
            {
              Page.ClientScript.RegisterStartupScript(this.GetType(), "Alerta", "<script type='text/javascript'>alert('Sua conta expirou! Entre em contato com o administrador do sistema.');</script>");
              
              // * Atualizando o usuário para Inativo com senha expirada
              usuario.PerfilID = usuario.PerfilID;
              usuario.Nome = usuario.Nome;
              usuario.Email = usuario.Email;
              usuario.Login = usuario.Login;
              usuario.AlterarSenha = usuario.AlterarSenha;
              usuario.SenhaExpirada = 'S';
              usuario.Ativo = 'N';
    
              usuario.alterar("ALT", usuario.ID);
            }
            // * Verifica se a senha do usuário expirou
            else if (usuario.SenhaExpirada.Equals('S'))
            {
              Page.ClientScript.RegisterStartupScript(this.GetType(), "Alerta", "<script type='text/javascript'>alert('Sua conta expirou! Entre em contato com o administrador do sistema.');</script>");
            }
            // * Verifica se o usuário possui acesso à intranet
            else if (!usuario.Acesso.Equals('I') && !usuario.Acesso.Equals('T'))
            {
              Page.ClientScript.RegisterStartupScript(this.GetType(), "Alerta", "<script type='text/javascript'>alert('Você não possui acesso à intranet');</script>");
            }
            else
            {
              // * Verifica se já foi criado um diretório temporário de upload para o usuário
              // * Se houver exclui o diretório
              string diretorio = Server.MapPath(@"~\sistema\upload\tmp" + Convert.ToString(usuario.ID));
              if (Directory.Exists(diretorio))
              {
                try
                {
                  Directory.Delete(diretorio, true);
                }
                catch (IOException ex) { }
              }
    
              // * Grava a sessão de autenticação do usuário
              Sessao sessao = new Sessao(getString.ConnectionString);
              sessao.gravar(usuario.ID, Session.SessionID);
    
              // * Sessão que indica acesso do usuário
              Session.Add("IntranetAutenticado", true);
    
              // * Redireciona para página inicial
              Response.Redirect(WebConfigurationManager.AppSettings["HostIntranet"] + "default.aspx");
            }
          }
          else
          {
            Page.ClientScript.RegisterStartupScript(this.GetType(), "Alerta", "<script type='text/javascript'>alert('Acesso negado! Verifique seu login e sua senha e tente novamente.');</script>");
          }
        }
      }
    

     

    Alguém tem idéia do que possa estar ocorrendo?

    Obrigado


    André Luis
    terça-feira, 23 de novembro de 2010 17:22

Respostas

Todas as Respostas