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

Expirar sessão fazendo update no banco


Diogo Rebello

Pergunta

Bom dia pessoal,

estou com uma dúvida que talvez não seja algo fora do normal, enfim eu tenho um site onde o usuário faz um login e senha e é armazenado isto em variáveis da sessão, porém tenho dois problemas, esse site tem um chat onde o usuário fica online toda vez que ele se loga, ao ele digitar login e senha e ir para uma página de validação, nesta mesma página tem uma query que pelo nome de usuário faz uma update na tabela do chat e troca o campo status de off para on. e uma página logout.php que faz o inverso ao ele sair ele faz um update de on para off. Mas quase todo mundo esquece de clicar me sair no site. A maioria apenas fecha o navegador. Eu preciso de duas coisas, uma é como eu faço o logout do cara por tempo de inatividade e fazendo o update na tabela chat de on para off, e como faço esse mesmo logout e update na tabela chat quando fechar o browser ao invés de clicar em sair.

Abaixo segue os codigos:

seguranca.php

<?php
//  Configurações do Script  

// ==============================  
$_SG['conectaServidor'] = true;    // Abre uma conexão com o servidor MySQL?  
$_SG['abreSessao'] = true;         // Inicia a sessão com um session_start()?     
$_SG['caseSensitive'] = false;     // Usar case-sensitive? Onde 'thiago' é diferente de 'THIAGO'     
$_SG['validaSempre'] = true;       // Deseja validar o usuário e a senha a cada carregamento de página?  
// Evita que, ao mudar os dados do usuário no banco de dado o mesmo contiue logado.    
$_SG['servidor'] = 'localhost';    // Servidor MySQL  
$_SG['usuario'] = '.....';          // Usuário MySQL  
$_SG['senha'] = '......';                // Senha MySQL  
$_SG['banco'] = '......';            // Banco de dados MySQL   
$_SG['paginaLogin'] = 'index2'; // Página de login  
$_SG['tabela'] = 'usuarios';       // Nome da tabela onde os usuários são salvos  
// ==============================   
 // ======================================  
 //   ~ Não edite a partir deste ponto ~  
 // ======================================  
   
 // Verifica se precisa fazer a conexão com o MySQL  

if ($_SG['conectaServidor'] == true) {  

$_SG['link'] = mysql_connect($_SG['servidor'], $_SG['usuario'], $_SG['senha']) or die("MySQL: Não foi possível conectar-se ao servidor [".$_SG['servidor']."].");  

mysql_select_db($_SG['banco'], $_SG['link']) or die("MySQL: Não foi possível conectar-se ao banco de dados [".$_SG['banco']."].");  
}  
if ($_SG['abreSessao'] == true) {  


session_start(); //inicia a sessão
$temposessao = 60; //em segundos
session_start(); 

if ($_SESSION["sessiontime"]) { 
    if ($_SESSION["sessiontime"] < (time() - $temposessao)) { 
        session_unset();
        header("Location: ".$_SG['paginaLogin']);  
        } 
}

}

function validaUsuario($usuario, $senha) {  
global $_SG;    
$cS = ($_SG['caseSensitive']) ? 'BINARY' : '';  
// Usa a função addslashes para escapar as aspas  

$nusuario = addslashes($usuario);  
$nsenha = addslashes($senha);     

// Monta uma consulta SQL (query) para procurar um usuário  

$sql = "SELECT `id`, `nome` FROM `".$_SG['tabela']."` WHERE ".$cS." `usuario` = '".$nusuario."' AND ".$cS." `senha` = '".$nsenha."' LIMIT 1";  
$query = mysql_query($sql);  
$resultado = mysql_fetch_assoc($query);  
// Verifica se encontrou algum registro  
if (empty($resultado)) {  
// Nenhum registro foi encontrado => o usuário é inválido  
return false;     
} else {  
// O registro foi encontrado => o usuário é valido    
// Definimos dois valores na sessão com os dados do usuário  
$_SESSION['usuarioID'] = $resultado['id']; // Pega o valor da coluna 'id do registro encontrado no MySQL  
$_SESSION['usuarioNome'] = $resultado['nome'];

      $nomes = explode(" ", $resultado['nome']);
      $geral = $nomes[0].'-'.$nomes[1];
      
$_SESSION['usuarioChat'] = $geral;      
 // Pega o valor da coluna 'nome' do registro encontrado no MySQL    
// Verifica a opção se sempre validar o login  
if ($_SG['validaSempre'] == true) {  
// Definimos dois valores na sessão com os dados do login  
$_SESSION['usuarioLogin'] = $usuario;  
$_SESSION['usuarioSenha'] = $senha;  
}  
return true;  
}  
}
/**  

* Função que protege uma página  
*/ 
function protegePagina() {  
global $_SG;  
if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {  
// Não há usuário logado, manda pra página de login  
expulsaVisitante();  
} else if (!isset($_SESSION['usuarioID']) OR !isset($_SESSION['usuarioNome'])) {  
// Há usuário logado, verifica se precisa validar o login novamente  
if ($_SG['validaSempre'] == true) {  
// Verifica se os dados salvos na sessão batem com os dados do banco de dados  
if (!validaUsuario($_SESSION['usuarioLogin'], $_SESSION['usuarioSenha'])) {  
// Os dados não batem, manda pra tela de login  
expulsaVisitante();  
}  
}  
}  
}/**  
* Função para expulsar um visitante  
*/ 
function expulsaVisitante() {  
global $_SG;  
 // Remove as variáveis da sessão (caso elas existam)  
unset($_SESSION['usuarioID'], $_SESSION['usuarioNome'], $_SESSION['usuarioLogin'], $_SESSION['usuarioSenha']);  
// Manda pra tela de login  
header("Location: ".$_SG['paginaLogin']);  

} 
?>
valida.php
<?php
include("seguranca.php");  
// Verifica se um formulário foi enviado  
if ($_SERVER['REQUEST_METHOD'] == 'POST') {  
// Salva duas variáveis com o que foi digitado no formulário  
// Detalhe: faz uma verificação com isset() pra saber se o campo foi preenchido  
$usuario = (isset($_POST['usuario'])) ? $_POST['usuario'] : '';  
$senha = (isset($_POST['senha2'])) ? $_POST['senha2'] : '';  
// Utiliza uma função criada no seguranca.php pra validar os dados digitados  
if (validaUsuario($usuario, $senha) == true) {  
// O usuário e a senha digitados foram validados, manda pra página interna  
include('conexao.php');


$conexao = mysql_connect($server, $user, $pass) or die ("Erro na conexao com DB!");
mysql_select_db($db, $conexao) or die ("DB inexistente");

$sql005 = mysql_query("SELECT id FROM usuarios WHERE usuario='$usuario'");
$row = mysql_fetch_assoc($sql005);
$user_id = $row['id'];
$sql009 = mysql_query("UPDATE amigos SET status='on' WHERE id_amigo='$user_id'");
header("Location: points");  
} else {  
// O usuário e/ou a senha são inválidos, manda de volta pro form de login  
// Para alterar o endereço da página de login, verifique o arquivo seguranca.php  
echo "<script>
    $('#confirm').jqm({
        overlay: 60,
        overlayClass: 'overlay',
        modal: true,
        trigger: false
    });
    confirm('Usuário e senha inválidos! Cadastre-se!', 'index2');
</script>";
}  
} 
?>
e em todas as páginas coloco este código que é a verificação de segurança:
<?php
include("seguranca.php"); // Inclui o arquivo com o sistema de segurança  
protegePagina(); // Chama a função que protege a página 
?>

Dese já obrigado a quem puder me ajudar pessoal!

Link para o comentário
Compartilhar em outros sites

2 respostass a esta questão

Posts Recomendados

  • 0

Bem não sei se essa a forma correta de fazer, mas é a forma que eu consegui imaginar aqui rsrs

Tenta fazer o update diferente exemplo

Se a Sessao estiver ativa ele vai compara o login da secao com o login da tabela dos usuarios se for = ele deixa aquele usuario online se não aquele usuario esta off

sendo assim ele so vai mostrar ON para os usuarios com secao ativa.

bem não sei se na pratica vai fica bem assim rsrs.

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
      152,1k
    • Posts
      651,8k
×
×
  • Criar Novo...