Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) Session não se renova


Fernando Simões

Pergunta

Olá ...

O problema é o seguinte quando tento fazer o login em um determindao ambiente e dou um logout , quando retorno para acessá-lo novamente da erro de session. o mais intrigante é que esse erro so ocorre em uma determinada conta do cpanel .. quando instalamos em outra conta os mesmos diretorios, arquivos etc. não apresenta o erro ...?

Desde Já muito obrigado .

Editado por Fernando Simões
Link para o comentário
Compartilhar em outros sites

13 respostass a esta questão

Posts Recomendados

  • 0

Coloque no começo do arquivo que faz o login essa função e mostre o erro:

<?php error_reporting(E_ALL | E_STRICT) ?>

Link para o comentário
Compartilhar em outros sites

  • 0

Desde já Agradeço ...

"PHP Warning: session_start() [<a href=function.session-start'>function.session-start</a>]: open(/tmp/sess_f1920c72a03d886414733482cc08afdd, O_RDWR) failed: Permission denied (13) in /home/.../index.php on line 3"

A mensagem é essa ...

Meu código foi condenado pelo ADM do servidor dizendo que há irregularidades , porém não me apontou quais são as irregularidades, o que me intriga mais é que em outras contas no mesmo servidor o mesmo código não apresenta erro somente em uma conta específica do servidor está gerando esse problema.

Sou novato em PHP e por isso não tenho como bater de frente e ele aproveita minha falta de experiência para condenar meu código.

Segue meu código abaixo se alguém puder me auxiliar eu agradeço.

<?php

session_start();

$_T_MAX_LOG=15;

$_t_border = 0;

$previlegio="";

//inclusão variaveis locais

include "_variaveis_locais.inc.txt";

//mensagens do systemas para analista

$show_msgsys=0;

$msgsys="";

//mensagens do systemas para usuario

$show_msguser=1;

$msguse="";

//Inclusão de funções

//funções de arquivos

include_once('_fnc_arq.php');

//captura de variaveis

if($_SESSION['logado] == 1)

{

//Encerra caso o tempo tenha excedido

if ($_SESSION['C_TIME'] !=')

{

$M_DIF = (time("H:i:s") - $_SESSION['C_TIME])/60;

if ($M_DIF>=$_T_MAX_LOG)

{

$_SESSION['logado']=0;

$msgsys=Usuario foi desconectado do Sistema, tempo expirado!";

$msguse="Usuario foi desconectado do Sistema, tempo expirado!";

}

}

//Encerra caso o Logout tenha sido requisitado

if ( $_POST["_logout] =="Sair")

{

$_SESSION['logado']=0;

$msgsys=$msgsys."<BR> Usuario se desconectou do Sistema!";

$msguse=$msguse."<BR> Usuario se desconectou do Sistema!";

session_destroy();

header("location:$_pag_dest");

}

//Analisar esta area do codigo

if(is_numeric($_REQUEST['iddownarq']))

{

$_SESSION['id_downarq']=$_REQUEST['iddownarq'];

$_SESSION['id_arq_down']=$_REQUEST['iddownarq'];

$_REQUEST['iddownarq']=0;

$msgsys=$msgsys."<BR> Capturado ID de download do arquivo:".$_SESSION['id_downarq'].":";

}

else

{

$_SESSION['id_downarq']=0;

$_SESSION['id_arq_down']=0;

$msgsys=$msgsys."<BR> não tem ID de download do arquivo";

}

//Analisar esta area do codigo

if(is_numeric($_REQUEST['idarq']))

{

$_SESSION['id_arq']=$_REQUEST['idarq'];

$_REQUEST['idarq']=0;

$msgsys=$msgsys."<BR> Capturado ID de arquivo:".$_SESSION['id_arq'].":";

}

else

$msgsys=$msgsys."<BR> não tem id de arquivo";

$msgsys=$msgsys."<BR> usuario esta logado";

if (isset($_SESSION['id_usuario']))

{

$IDU = $_SESSION['id_usuario'];

$msgsys=$msgsys."<BR> Restaurando a session id_usuario no IDU!";

$msgsys=$msgsys."<BR> Usuario:".$IDU.": esta logado, faltam ".number_format(15 - $M_DIF,"0")." min. para fim de sessão!";

$msguse=$msguse."<BR> Usuario:".$IDU.": esta logado, faltam ".number_format(15 - $M_DIF,"0")." min. para fim de sessão!";

if ($_SESSION['class']==1)

$previlegio=su";

else

$previlegio="u";

}

else

{

$IDU = 0;

$msgsys=$msgsys."<BR> session id_usuario esta zerada!";

$msgsys=$msgsys."<BR> tentativa de recuperar IDU!";

// pedaço colocado para tentar recuperar o IDU

include "_acesso_bd.inc.txt";

$cone = mysql_connect($host,$user,$passwd) or die ("erro de conexão");

mysql_select_db($base) or die ("erro de conexão");

$consulta="select count(*) as q from _usuario where usuario_u='$m_usuario' and senha_u='$m_senha'";

$resultado = mysql_query($consulta) or die ("erro de consulta");

$linhas = mysql_fetch_assoc($resultado);

if ($linhas["q]==0)

{

$msgsys=$msgsys."<BR> Usuario ou senha não confere";

$msguse=$msguse."<BR> Usuario ou senha não confere";

}

else

{

$msgsys=$msgsys."<BR> usuario existe no banco";

$consulta="select * from _usuario where usuario_u='$m_usuario' and senha_u='$m_senha'";

$resultado = mysql_query($consulta) or die ("erro de consulta");

$linhas = mysql_fetch_assoc($resultado);

// captura o ID do ususario

$IDU = $linhas["id_usuario"];

$_SESSION['id_usuario'] = $IDU;

$msgsys=$msgsys."<BR> capturou o ID user e colocou na session";

$msgsys=$msgsys."<BR>IDU:".$IDU;

// fim do pedaço colocado para recuperar o IDU

}

$msgsys=$msgsys."<BR> fim tentativa de recuperar IDU!";

$msgsys=$msgsys."<BR> Usuario:".$IDU.": esta logado, faltam ".number_format(15 - $M_DIF,"0")." min. para fim de sessão!";

$msgsys=$msgsys."<BR> classe do Usuario:".$_SESSION['class'].":";

$msguse=$msguse."<BR> Usuario:".$IDU.": esta logado, faltam ".number_format(15 - $M_DIF,"0")." min. para fim de sessão!";

}

}

else

{

$msgsys=$msgsys."<BR> usuario não esta logado";

// entrou com usuario

if ( $_POST["_usuario"] != "" and $_POST["_senha"] != "" )

{

$msgsys=$msgsys."<BR> usuario entrou com login e senha";

$m_usuario = $_POST["_usuario"];

$m_senha = $_POST["_senha"];

$_SESSION['_usuario'] = $m_usuario;

$_SESSION['_senha'] = $m_senha;

$_POST["_usuario"]=";

$_POST["_senha]="";

include "_acesso_bd.inc.txt";

$cone = mysql_connect($host,$user,$passwd) or die ("erro de conexão");

mysql_select_db($base) or die ("erro de conexão");

$consulta="select count(*) as q from _usuario where usuario_u='$m_usuario' and senha_u='$m_senha'";

$resultado = mysql_query($consulta) or die ("erro de consulta");

$linhas = mysql_fetch_assoc($resultado);

if ($linhas["q"]==0)

{

$msgsys=$msgsys."<BR> Usuario ou senha não confere";

$msguse=$msguse."<BR> Usuario ou senha não confere";

}

else

{

$msgsys=$msgsys."<BR> usuario existe no banco";

$consulta=select * from _usuario where usuario_u='$m_usuario' and senha_u='$m_senha'";

$resultado = mysql_query($consulta) or die ("erro de consulta");

$linhas = mysql_fetch_assoc($resultado);

// captura o ID do ususario

$IDU = $linhas["id_usuario];

$_SESSION['id_usuario'] = $IDU;

$msgsys=$msgsys."<BR> capturou o ID user e colocou na session";

$msgsys=$msgsys."<BR>IDU:".$IDU;

//variaveis de tempo

$t=time("H:i:s");

$_SESSION['C_TIME'] = $t;

$_SESSION['logado'] = 1;

$_SESSION['class']=$linhas["class_u"];

if ($_SESSION['class']==1)

$previlegio=su";

else

$previlegio="u";

}

}

}

//Cabeçalho da Pagina

include "_cabecalho.inc.txt";

//area de conversação com o Usuario

include "_robot.inc.txt";

//corpo da Pagina

echo "<tr><td class=A>";

if($_SESSION['logado] != 1)

include "_login.inc.txt";

else

{

if($_SESSION['id_arq']<>0)

include "_abrir_arq_".$previlegio.".inc.txt";

else

{

if( $_POST["_apagar"]==Sim")

include "_ex_".$previlegio.".inc.txt";

else

{

if( $_POST["_apagar]=="Apagar")

include "_con_ex_".$previlegio.".inc.txt";

else

{

if( $_POST["_postar_con"]==Sim")

include "_postar_up_".$previlegio.".inc.txt";

else

{

if( $_POST["_postar_con]=="Enviar")

include "_postar_con_".$previlegio.".inc.txt";

else

{

if ($_POST["_postar"] ==Postar")

include "_postar_".$previlegio.".inc.txt";

else

{

if ($_POST["_retorna] =="Retorno")

include "_retorna_".$previlegio.".inc.txt";

else

{

if ($_POST["_retorna_con"] ==Enviar")

include "_retorna_con_".$previlegio.".inc.txt";

else

{

if ($_POST["_retorna_con] =="Sim")

include "_retorna_up_".$previlegio.".inc.txt";

else

{

if ($_POST["_rel"] ==Fechamento")

include "_rel_".$previlegio.".inc.txt";

else

{

if ($_POST["_relatar] =="Relatar")

include "_relatar_arq_".$previlegio.".inc.txt";

else

{

//Linha do logout

echo "<form name='logout' id='logout' method='POST' action='index.php'>";

echo "<table width=100% border= $_t_border ><tr><td align=right><input type=submit value=Sair name=_logout></td></tr></table>";

echo "</form>";

//Fim de Linha do logout

if ($_POST["_limpar_disco"] =="Limpar")

_meu_limpa_dir($temp_down);

include "_adm_".$previlegio.".inc.txt";

}

}

}

}

}

}

}

}

}

}

}

//fim das funções

}

echo "</td></tr>";

//Rodape

include "_rodape.inc.txt";

?>

Desde já agradeço ...

Muito Obrigado,

Fernando Simões

Editado por Fernando Simões
Link para o comentário
Compartilhar em outros sites

  • 0

Corrijam-me se eu estiver errado mas, eu acho que o usuário que o PHP usa pra trabalhar não tem direto para gravar na tmp; seria isso pessoal?

Link para o comentário
Compartilhar em outros sites

  • 0

Obrigado por responderem,

O diretório de gravação das sessions já foi alterado a nivel de teste, e o erro continua...

Fiz testes com outas aplicações que já desenvolvi e o erro continua, já testei em outro servidor e não apresentou problemas.

Gostaria de saber dos colegas , se existe alguma forma especifica na utilização de sessions, ou alguma forma de susbstituí-la por outra função.

Se puderem analizar meu código e apontar alguma irregularidade quanto à insegurança ou metodologia equivoda eu agradeço.

Obrigado,

Fernando Simões

Link para o comentário
Compartilhar em outros sites

  • 0

O erro está na linha 3 mesmo, onde inicia a session. Eu só conheço por cookies porém não é a mesma funcionalidade.

Quanto ao usuário. Eu acabei de fazer um teste aqui e isso é uma boa questão a se levantar, eu acho.

Coloquei um script com o comando:

<?php
    print_r(exec("whoami"));
?>

E o mesmo imprimiu na tela: www-data!

Ou seja, no meu Ubuntu ele não está utilizando o usuário root (o que eu acho que seria altamente perigoso), mas sim o usuário www-data.

=)

Link para o comentário
Compartilhar em outros sites

  • 0

Eu não disse que ele utiliza o usuário root, eu disse que ele utiliza um usuário root (com privilégios de root)... nos hosts geralmente é o usuário nobody (no host que eu uso, o usuário é o mesmo que acessa o cpanel)... note que o perigo seria se tudo fosse permitido, mas muitas funções (como a exec) não funcionam em servidores de produção exatamente para evitar problemas de segurança....

Link para o comentário
Compartilhar em outros sites

  • 0

Sim eu entendo, mas nem todos os servidores são "perfeitos" no requisito segurança. E isso pode estar acontecendo no server dele.

Link para o comentário
Compartilhar em outros sites

  • 0

Olá Wanderson

Meu server não permite exec como nosso colega citou acima.

Bom, meu problema continua porém, estou cada vez mais convencido que há algo de errado no server, o mesmo projeto esta rodando no mesmo servidor porem em outra conta sem erros.

O problema é que a tese de código errado está sendo embasada na minha falta de experiência, mas reflitem comigo colegas.

Se o Firewall, PHP,Modsecurity, Antivirus, Mysql, Apachee SUPHP são globais, porque em uma conta o projeto funciona e em outra não?

Obrigado

Fernando Simões

Editado por Fernando Simões
Link para o comentário
Compartilhar em outros sites

  • 0

Eu não disse que tu vais ter que usar o exec... Eu disse que fiz um teste com o exec para ver qual usuário eu uso no PHP para processar os scripts... Foi somente um teste...

Então façamos outro teste... Por dentro do PHP, crie um arquivo na pasta /tmp do teu server e vê se isso gera um erro.

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Wanderson,

Eu entendi seu post, e não pude fazer o mesmo teste que você, foi apenas isso que te relatei...

e já te adianto que o user em questão é o root da conta.

Analisando o código percebi que em alguns includes os arquivos .inc contém session_start os removi e o problema foi solucionado.

Como o projeto é gerado em uma única página deixei apenas um session_start na index.php, esse projeto foi criado em módulos separados e agregados no final por mais de um desenvolvedor devido a isso havia mais de um session_start.

Estou restaurando o sistema na conta original para demais testes e a ratificação da solução, assim que concretizar os testes, retornarei um post com o resultado das alterações.

Desde já agradeço

Obrigado,

Fernando Simões

Editado por Fernando Simões
Link para o comentário
Compartilhar em outros sites

  • 0

Bom dia

Primeiramente eu agradeço a atenção dos colegas.

O problema foi solucionado, foram editados todos os arquivos que continham session_start e somente mantida a função na index.php.

Foi implementado uma página Logout.php onde a session é destruída pelo session_destroy de forma eficaz.

No sistema original o session_destroy era executado na própria index.php (página index.php é plataforma para todas as outras funções do projeto) não estava fazendo essa função de modo eficaz, possivelmente o causador do problema.

O Server não foi alterado apesar das minhas desconfianças de inconsistência no sistema.

Grato

Fernando Simões

Editado por Fernando Simões
Link para o comentário
Compartilhar em outros sites

Participe da discussão

Você pode postar agora e se registrar depois. Se você já tem uma conta, acesse agora para postar com sua conta.

Visitante
Responder esta pergunta...

×   Você colou conteúdo com formatação.   Remover formatação

  Apenas 75 emoticons são permitidos.

×   Seu link foi incorporado automaticamente.   Exibir como um link em vez disso

×   Seu conteúdo anterior foi restaurado.   Limpar Editor

×   Você não pode colar imagens diretamente. Carregar ou inserir imagens do URL.



  • Estatísticas dos Fóruns

    • Tópicos
      152k
    • Posts
      651,8k
×
×
  • Criar Novo...