Jump to content
Fórum Script Brasil
  • 0

Expirar sessão fazendo update no banco


Diogo Rebello

Question

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 to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 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 to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



  • Forum Statistics

    • Total Topics
      152.2k
    • Total Posts
      652k
×
×
  • Create New...