Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Bom dia pessoas,
Estou tendo um pouco de dificuldade com o session que criei para o login, o objetivo dele seria criar um tempo para expirar de acordo com o tempo do log do usuário e verificar se o usuario esta logado ou n para acessar a pagina até então isso esta funcionando perfeitamente, porém surgiu um pequeno problema com o login, para o usuario conseguir logar ele precisa tentar 2x T_T.
O quê vcs acham que estou fazendo de errado?
**obs.: O site foi criado em ajax. *
Pag session;
<?php
session_start();
$temposessao = 820; //em segundos
if ($_SESSION["sessiontime"]) {
if ($_SESSION["sessiontime"] < (time() - $temposessao)) {
session_unset();
echo "Seu tempo Expirou!";
}
} else {
session_unset();
}
$_SESSION["sessiontime"] = time();
if(IsSet($_SESSION['login']))
$nome_usuario=$_SESSION['login'];
if(IsSet($_SESSION['senha']))
$senha_usuario=$_SESSION['senha'];
if(!(empty($nome_usuario) OR empty($senha_usuario)))
{
//conexao com o banco
$db = "servidorTeste"; // nome do banco de dados
$host = "localhost"; // local onde seu banco de dados está hospedado,
$userdb = "usuarioTeste"; // nome de usuário registrado no banco de dados
$passdb = "123456"; // senha do usuário
$port = "5432"; // "porta" para conexão ao banco de dados
$con = "host=$host port=$port dbname=$db user=$userdb password=$passdb";
$sql=pg_query("SELECT * FROM usuarios WHERE login='$nome_usuario'");
$conta=pg_num_rows($sql);
if($conta>=1)
{
if($senha_usuario != pg_fetch_result($sql,0,"senha"))
{
unset($_SESSION['login']);
unset($_SESSION['senha']);
echo "você não efetuou o login!";
exit;
}
}
else
{
unset($_SESSION['login']);
unset($_SESSION['senha']);
header("Location: ../index.php#past_php/testelogin.php");
exit;
}
}
else
{
echo "<script language='javascript'>
window.location='../index.php#past_php/testelogin.php';
</script>";
exit;
}
pg_close($con);
?>VLws
>
O problema é simples: a primeira vez que ele tenta logar, acontece de logar e quebrar a sessão por causa da lógica de tempo que você está utilizando. Na segunda, o usuário não cai na condição de quebrar sessão se caso o tempo de sessão for maior que o valor especificado.
Por acaso, consegues entender?
Não vou te dar o código pronto, mas tente depurar. Remova, por exemplo, este recurso que trabalha com a expiração da sessão e veja que o seu código funcionará perfeitamente. Uma vez isso sendo realidade, o problema está na sua lógica para sessão.
Só para confirmar, mas a primeira vez que você tenta acessar ele está exibindo "você não efetuou o login!"?
Eu tinha pensado nisso, mas n consegui solucionar.. srrssrrs
AH! nn n exibe nenhuma mensagem de erro, ele simplesmente redireciona para a página de login novamente (como se o tempo estivesse expirado).
Vlws pela dica vou pensar um pouco + na logica. ^~
E sim! De fato sem o tempo funciona td certinho.... c tem alguma sugestão para fazer esse danado funcionar?
Vlws
Sugestão? Tenho sim!
Escreva a sua lógica num papel. Com ela funcionando de maneira abstrata, coloque em prática no seu código.
O que está acontecendo são erros calculares. A sua ideia de expiração de sessão está certa, o que está sendo falho é a matemática que faz a contagem de quando a sessão expira.
Se está redirecionando para a página de login, então você está caindo nesta condição:
else
{
unset($_SESSION['login']);
unset($_SESSION['senha']);
header("Location: ../index.php#past_php/testelogin.php");
exit;
}
Pense um pouco mais, rapaz.
>
Sugestão? Tenho sim!
Escreva a sua lógica num papel. Com ela funcionando de maneira abstrata, coloque em prática no seu código.
O que está acontecendo são erros calculares. A sua ideia de expiração de sessão está certa, o que está sendo falho é a matemática que faz a contagem de quando a sessão expira.
Se está redirecionando para a página de login, então você está caindo nesta condição:
else
{
unset($_SESSION['login']);
unset($_SESSION['senha']);
header("Location: ../index.php#past_php/testelogin.php");
exit;
}
Pense um pouco mais, rapaz.
Então, eu já tinha verificado com um alert se ele estaria entrando nesse else... mas n chega entrar não. ^^
Na verdade esta entrando nessa parte do codigo:
else
{
echo "<script language='javascript'>
window.location='../index.php#php/login.php';
</script>";
exit;
}
VLws pela força.. assim que descobri posto aqui. =P
>
Sugestão? Tenho sim!
Escreva a sua lógica num papel. Com ela funcionando de maneira abstrata, coloque em prática no seu código.
O que está acontecendo são erros calculares. A sua ideia de expiração de sessão está certa, o que está sendo falho é a matemática que faz a contagem de quando a sessão expira.
Se está redirecionando para a página de login, então você está caindo nesta condição:
else
{
unset($_SESSION['login']);
unset($_SESSION['senha']);
header("Location: ../index.php#past_php/testelogin.php");
exit;
}
Pense um pouco mais, rapaz.
Resolvido Guilherme.. porém não compreendi quando vc fala sobre erros calculares?
Consegui resolver apenas comentando 1 linha //session_unset(), como mostrado abaixo:
if ($_SESSION["sessiontime"]) {
if ($_SESSION["sessiontime"] < (time() - $temposessao)) {
session_unset();
echo "<script language='javascript'>
alert('Seu tempo expirou');
window.location='../index.php#php/login.php';
</script>";
}
} else {
//session_unset();
}
*percebi que estava meio sem sentido esse else. =P
N sei s foi a forma + adequada, mais um simples comentário na linha do cod. funcionou perfeitamente. =]
vlws
O problema é simples: a primeira vez que ele tenta logar, acontece de logar e quebrar a sessão por causa da lógica de tempo que você está utilizando. Na segunda, o usuário não cai na condição de quebrar sessão se caso o tempo de sessão for maior que o valor especificado.
Por acaso, consegues entender?
Não vou te dar o código pronto, mas tente depurar. Remova, por exemplo, este recurso que trabalha com a expiração da sessão e veja que o seu código funcionará perfeitamente. Uma vez isso sendo realidade, o problema está na sua lógica para sessão.
Só para confirmar, mas a primeira vez que você tenta acessar ele está exibindo "você não efetuou o login!"?