Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Francys Dias

Erro Muito Estranho! Php

Recommended Posts

Um problema muito estranho vem comendo a minha cabeça. De uma semana pra casa. O sistema da empresa vinha funcionando normal. E agora parou de funcionar somente em algumas maquinas especificas.

 

Quando inverto a função de um problema, funciona na minoria das maquinas, e nao funciona na maioria, quando coloca a negação "!" deixa de funcionar na minoria.

function tempo_sessao_valido(&$sql,&$user_id,&$user_nome,&$user_local,&$user_local_id,$sessao_id='')
{  // Valida tempo de uma sessao e obtem id do usuario
   global $config, $sessao, $PHP_SELF, $_SERVER;
   $IP_BROWSER = (!empty($_SERVER['HTTP_X_FORWARDED_FOR']))?$_SERVER['HTTP_X_FORWARDED_FOR']:$_SERVER["REMOTE_ADDR"];
   if (empty($sessao_id))
      $sessao_id = session_id();
   $resultado = false;  // Tempo esgotado
   if ($sessao['logado']) {
      $limite = time()-$config['Timeout'];  //Tempo das Sessoes
      $sql->QueryRow("Select ses.usuario_id,ses.tempo,ses.ip,usu.login,usu.nome,loc.nome,loc.idlocal "
                    ."from sessao as ses inner join usuario as usu on (ses.usuario_id = usu.id) "
                    ."                   inner join grupo as grp on (usu.grupo_id = grp.id) "
                    ."                   inner join seg_lotacao as lot on (lot.idusuario = usu.id) "
                    ."                   inner join emp_local as loc on (lot.idlocal = loc.idlocal) "
                    ."where ses.id='".$sessao_id."' "
                    ."and usu.ativo='S' and grp.ativo='S' and lot.elotacaoatual='1' ");
      if ($sql->rows > 0) {
         $user_id   = $sql->data[0];
         $tempo     = $sql->data[1];
         $ip        = $sql->data[2];
         $login     = $sql->data[3];
         $user_nome = $sql->data[3];
         $user_local = $sql->data[5];
         $user_local_id = $sql->data[6];
         if (empty($sessao_id))
            $TESTE_SESSAO = (($ip==$IP_BROWSER) and ($login==$sessao['nome']));
         else
            $TESTE_SESSAO = ($ip==$IP_BROWSER);
         if ($TESTE_SESSAO) {
            if ($tempo > $limite)
               $resultado = true;  //Tempo nao esgotado
            else {
               $nome_pagina = strtoupper(basename($PHP_SELF));
               $sql->QueryRow("Select sessao from pagina where nome='$nome_pagina'");
               if ($sql->rows > 0) {
                  if ($sql->data[0]=='N') { // Pagina nao participa do controle do tempo de sessao
                     $limite = time()-($config["TimeoutMax"]); //Tempo Maximo das Sessoes
                     if ($tempo > $limite)
                        $resultado = true;  // Tempo nao esgotado
                  }
               }
            }
         }
         else
            grava_arquivo('/tmp/erro_piau',"Mistura de Usuários:$login IP-OLD:$ip USER-NEW:".$sessao['nome']." IP-NEW:$IP_BROWSER PAG:".basename($PHP_SELF)." SIS:".$config["Sistema"]);
      }
      if (!$resultado)
         $sql->Delete("Delete from sessao where id='".session_id()."' ");
   }
   $sql->Free_Query();
   return $resultado;
}

na pagina login onde estou chamando a função é que o problema acontece.

if ( !tempo_sessao_valido($sql,$usuario_id,$usuario_nome,$local_atual,$local_id)) { // Obtem tambem o id do usuario
   $sessao['logado'] = false;
   $sessao['erro'] .= "Esta sessão expirou!<br><font class=erromin>Efetue novo login</font>";
   $sessao['pid']="0";
   $_SESSION['sessao'] = $sessao;
   $sessao["mascara"] = "";
   encerra_tempo_sessao(); //Exclui contangem de tempo da sessao
   $login = $sessao["nome"];
   if (isset($config["Temporario"]))
      grava_arquivo($config["Temporario"]."/acesso_piau_novo","TIMEOUT:$login");
   else
      grava_arquivo("/tmp/acesso_piau_novo","TIMEOUT:$login SIS:".$config["Sistema"]);
   if ( pagina_fecha_browser($sql) ) {
      echo "<html><title>$titulo_pagina</title>";
      echo '<body onload="javascript:alert('."'Esta sessão expirou!'".');window.close();window.opener.location.reload();"></body></html>';
   }
   else
      header("Location: ".$config['URL']."".$config['Diretorio']."/login.php");
   exit;
}

Quando clico para fazer o login ele não entra na pagina :(

 

Me ajudem...

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ele mostra algum erro na tela?

 

Ou olha no arquivo de erro do PHP se ele fala o erro..

Compartilhar este post


Link para o post
Compartilhar em outros sites

O fato de quando você remove a exclamação o problema se inverter é o esperado, já que você altera a verificação. O que você terá que fazer é debugar a função que criou e ver porque ela não está retornando o true/false, infelizmente só você poderá fazer isto, já que depende de ter acesso ao terminal que não está respondendo como deveria.

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.