Ir para conteúdo

POWERED BY:

Arquivado

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

formalivre

[Resolvido] limitar o tempo de uma sessão inativa.

Recommended Posts

olá tenho este arquivo que está autenticando os usuários. mas gostaria de limitar o tempo inativo do usuário. tipo se ele ficar 60 segundo sem alterar nada ele é deslogado.

abaixo segue o código.

<?php

// Recebemos os dados digitados pelo usuário

$login = $_POST['login'];

$senha = $_POST['senha'];

//Estabelecemos uma conexão com o banco de dados

//mysql_connect("Nome ou IP do servidor", "Usuario", "Senha");

$conn = mysql_connect("localhost", "xxxxxx", "xxxxxx") or die("Impossivel conectar");

//caso a conexão seja estabelecida corretamente seleciona o banco de dados a ser usado

if($conn)

{

mysql_select_db("xxxxxx", $conn);

}

//Criamos o comando que efetua a busca do banco

$sql = "SELECT id, nome FROM cliente WHERE login = '$login' AND senha = '$senha'";

//Executamos o comando

$rs = mysql_query($sql, $conn);

//Retornamos o numero de linhas afetadas

$num = mysql_num_rows($rs);

//Verificams se alguma linha foi afetada, caso sim retornamos suas informações

if($num > 0)

{

//Retorna os dados do banco

$rst = mysql_fetch_array($rs);

$id = $rst["id"];

$nome = $rst["nome"];

//Inicia a sessão

session_start();

//Registra os dados do usuário na sessão

$_SESSION["id"] = $id;

$_SESSION["nome"] = $nome;

$_SESSION["login"] = $login;

//Encerra a conexão com o banco

mysql_close($conn);

//Redireciona para o index

header("Location:../index.php");

}

else

{

//Encerra a conexão com o banco

mysql_close($conn);

//Caso nenhuma linha seja retornada emite o alerta e retorna

header("Location:../erro.php");

}

?>

se alguém puder me ajudar. obrigado desde já.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Use a função time() para pegar o tempo que ele deu o ultimo clique no site.

E vai salvando a cada pagina que ele visita, o valor do time() atual em uma sessão ou no banco de dados para algo mais seguro.

 

E juntamente quando voce vai salvando o ultimo clique, ao mesmo tempo voce verifica, comparando se o ultimo valor gravado na sessão ou no banco não tem diferença maior de 60 segundos.

 

Se tiver, é só executar umas funções para terminar a sessão dele.

 

Se quiser exemplo mais pratico, no código mesmo, avisa que eu faço.

Compartilhar este post


Link para o post
Compartilhar em outros sites

<?php

define('TEMPOEX', 5*60); /*tempo de expiração da sessão em minutos*/

 

//todas as páginas que quiser um lifetime para a sessão

ini_set('session.gc_probability', 100);

ini_set('session.gc_maxlifetime', TEMPOEX);

ini_set('session.cookie_lifetime', TEMPOEX);

ini_set('session.cache_expire', TEMPOEX);

 

session_start();

 

if(isset($_SESSION['algumaChave'])){

session_regenerate_id();

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Se não entender o exemplo do eibon, pode seguir pelo meu.

 

<?php

// Inicia uma sessão.
session_start();

// Verifica se $_SESSION['ultimoClick'] esta setada e não esta vazia.
// Caso esteja, ele verifica o tempo que o usuario levou entre um clique e outro.
// Caso não, ele seta a sessão e dá o valor do tempo time() atual.
if ( isset($_SESSION['ultimoClick']) AND !empty($_SESSION['ultimoClick']) ) {

$tempoAtual = time();

// Faz uma condição entre o tempo do ultimo click e o tempo atual.
// Caso dê maior que 60 segundos, redireciona para a pagina desejada.
// Caso não de maior, apenas atualiza o valor do ultimo clique para o valor atual.
if ( ($tempoAtual - $_SESSION['ultimoClick']) > '60' ) {

header("Location:sair.php?motivo=inatividade");
exit();

}else{

$_SESSION['ultimoClick'] = time();

}

}else{

$_SESSION['ultimoClick'] = time();

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

olá André. só mais uma dúvida. eu utilizo este arquivo como include em todas as páginas para proteger:

<?php

//Inicia a sessão

session_start();

//Verifica se há dados ativos na sessão

if(empty($_SESSION["id"]) || empty($_SESSION["nome"]) || empty($_SESSION["login"]))

{

//Caso não exista dados registrados, exige login

header("Location:./login.php");

}

?>

esse script que você passou eu incluo ele neste arquivo que uso para proteger?

Compartilhar este post


Link para o post
Compartilhar em outros sites

oi André.

juntei assim:

<?php

//Inicia a sessão

session_start();

//Verifica se há dados ativos na sessão

if(empty($_SESSION["id"]) || empty($_SESSION["nome"]) || empty($_SESSION["login"]))

{

//Caso não exista dados registrados, exige login

header("Location:./login.php");

}

// Verifica se $_SESSION['ultimoClick'] esta setada e não esta vazia.

// Caso esteja, ele verifica o tempo que o usuario levou entre um clique e outro.

// Caso não, ele seta a sessão e dá o valor do tempo time() atual.

if ( isset($_SESSION['ultimoClick']) AND !empty($_SESSION['ultimoClick']) ) {

 

$tempoAtual = time();

 

// Faz uma condição entre o tempo do ultimo click e o tempo atual.

// Caso dê maior que 60 segundos, redireciona para a pagina desejada.

// Caso não de maior, apenas atualiza o valor do ultimo clique para o valor atual.

if ( ($tempoAtual - $_SESSION['ultimoClick']) > '60' ) {

 

header("Location:sair.php?motivo=inatividade");

exit();

 

}else{

 

$_SESSION['ultimoClick'] = time();

 

}

 

}else{

 

$_SESSION['ultimoClick'] = time();

 

}

 

?>

ele desloga certinho. mas depois não consigo logar novamente ele sempre volta para a página "sair.php"

fiz algo errado?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Hmm, tinha um errinho de lógica ali.

Faltou só, depois que o cara é deslogado, limpar as sessões para que ele possa logar novamente.

 

Testa ai.

 

<?php
//Inicia a sessão
session_start();
//Verifica se há dados ativos na sessão
if(empty($_SESSION["id"]) || empty($_SESSION["nome"]) || empty($_SESSION["login"]))
{
//Caso não exista dados registrados, exige login
header("Location:./login.php");
}
// Verifica se $_SESSION['ultimoClick'] esta setada e não esta vazia.
// Caso esteja, ele verifica o tempo que o usuario levou entre um clique e outro.
// Caso não, ele seta a sessão e dá o valor do tempo time() atual.
if ( isset($_SESSION['ultimoClick']) AND !empty($_SESSION['ultimoClick']) ) {

$tempoAtual = time();

// Faz uma condição entre o tempo do ultimo click e o tempo atual.
// Caso dê maior que 60 segundos, redireciona para a pagina desejada.
// Caso não de maior, apenas atualiza o valor do ultimo clique para o valor atual.
if ( ($tempoAtual - $_SESSION['ultimoClick']) > '60' ) {

session_unregister($_SESSION['ultimoClick']);
$_SESSION = array();
session_destroy();
header("Location:sair.php?motivo=inatividade");
exit();

}else{

$_SESSION['ultimoClick'] = time();

}

}else{

$_SESSION['ultimoClick'] = time();

}

?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Pessoal, utilizei os exemplos citados acima mas nao funcionou corretamente sou muito iniciante nesta parte de sessão e gostaria de saber se estes exemplos funcionam normalmente com php 2 e mysql 4...

 

Vlww

Compartilhar este post


Link para o post
Compartilhar em outros sites

Tu fez algo errado.Testei o meu aqui e funcionou corretamente,e é bem veloz por ser implementado em C.

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.