Ir para conteúdo

POWERED BY:

Arquivado

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

mcd more core

[Resolvido] Verificar se usuario existe no BD SESSION

Recommended Posts

Olá, pessoal.

 

# Possuo um sistema de login por session, o que quero fazer é que...

 

* Se o usuário [ Carlos ] estiver online agora, mas eu o ADMIN tive que exclui-lo do BD, automaticamente ele já deve [ DESLOGAR ]

 

# Isso eu consigo fazer com COOKIE, porém com sessiona não consigo ter essa mesma rapidez de verificação, pois como é session, quando eu estou logado e excluo [ carlos ] do BD, ele continua logado na session, mas não exibi os dados do [ carlos ] eu gostaria que assim que ele não estivesse mais existente no BD, ele [ DESLOGUE ].

 

## Segue meu código de verificação de session

 


<?php

@session_start("login");
if(!(@$_SESSION['login']) AND (@$_SESSION['senha'])){
echo "<META HTTP-EQUIV=REFRESH CONTENT='0; URL=meu-login.php'>";
   exit;
}else{
@$login= $_SESSION['login'];
@$senha = $_SESSION['senha'];
}
?>

 

Aguardo uma força galera.

B)

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples, toda hora que o usuário entrar em uma página você vai fazer uma consulta no banco de dados se o mesmo existe, e não existir, você faz um unset na session.

if( existe .. )
   unset( $_SESSION[ 'login' ] , $_SESSION[ 'senha' ] );

 

Pare de esconder os erros dos códigos, erros foram feitos para serem corrigidos, então corrige os erros quando tiver, não os esconda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Simples, toda hora que o usuário entrar em uma página você vai fazer uma consulta no banco de dados se o mesmo existe, e não existir, você faz um unset na session.

if( existe .. )
   unset( $_SESSION[ 'login' ] , $_SESSION[ 'senha' ] );

 

Pare de esconder os erros dos códigos, erros foram feitos para serem corrigidos, então corrige os erros quando tiver, não os esconda.

 

# Isso ele faz, a questão é quando o [usuario] já esta LOGADO, e mesmo ele logado eu va la agora no BD e exclua ele, ele ainda continua LOGADO por meio da SESSION, mas não aparece nenhum dos dados dele, mas ele continua LOGADO por conta da SESSION, esse código que você me passou eu irei testar aqui, se resolver dou um UP aqui.

valeu. :D

 

[RESOLVIDO]

 

# Valeu pela força ai :joia:

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não erra melhor usar ajax(a cada 5 segundos[por ex]), para verificar se ele ainda estar na base de dados, caso não esteja no db, faz um unset e na session e redireciona para a index, isso retiraria ele na hora que o removesse do db

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não erra melhor usar ajax(a cada 5 segundos[por ex]), para verificar se ele ainda estar na base de dados

Pensa em 10000 usuários usando o sistema, e aí ? você vai ficar fazendo requisições desnecessárias, outras necessárias entende ?

Então a cada 5 segundos você iria perguntar pro servidor :

Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não
Fui excluído ? R : Não

 

O tráfego seria muito fora do normal.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Não erra melhor usar ajax(a cada 5 segundos[por ex]), para verificar se ele ainda estar na base de dados, caso não esteja no db, faz um unset e na session e redireciona para a index, isso retiraria ele na hora que o removesse do db

 

# Olá amigo, qual código de AJAX que você poderia me passar para que ele pudesse sempre a cada determinado tempo [x] ele verificar se ainda esta logado ?, valeu aguardo!

Compartilhar este post


Link para o post
Compartilhar em outros sites

mcd more core, não faça isso, ou então vai cometer a maior burrada na sua vida ! Pensa no que estará cometendo:

 

Se tivermos 30 pessoas conectadas ao chat, fazendo 1 requisição por segundo, teremos 30 requisições "Tenho novas mensagens ?" e 30 respostas do servidor: "Você não tem novas mensagens"

 

Agora, imaginem em um sistema de atendimento de uma grande corporação, onde cada cliente conversa com 1 atendente.

 

Se tivermos 1000 clientes em todo o mundo, poderemos ter 2000 participantes (cada cliente com seu atendente) fazendo requisições e o servidor respondendo a mesma coisa.

 

Falando em bytes, teremos aproximadamente 32 bytes apenas de cabeçalhos e 27 bytes para o corpo da requisição, para cada requisição.

 

Se efetuarmos 1000 requisições, teremos um tráfego de 59000 bytes em requisições e 51000 bytes em respostas, se fizermos 2000 requisições (clientes e atendentes), teremos 118.000 e 102.000 bytes por segundo.

 

Em 1 hora de uso do chat teremos 792.000.000 bytes e, se essa aplicação funcionar 8 horas por dia, durante 22 dias, teremos 139.392.000.000 bytes trafegados entre cliente e servidor.

 

Não é a sua situação, mas vai ser uma parecida.

Compartilhar este post


Link para o post
Compartilhar em outros sites

mcd more core, não faça isso, ou então vai cometer a maior burrada na sua vida ! Pensa no que estará cometendo:

 

Se tivermos 30 pessoas conectadas ao chat, fazendo 1 requisição por segundo, teremos 30 requisições "Tenho novas mensagens ?" e 30 respostas do servidor: "Você não tem novas mensagens"

 

Agora, imaginem em um sistema de atendimento de uma grande corporação, onde cada cliente conversa com 1 atendente.

 

Se tivermos 1000 clientes em todo o mundo, poderemos ter 2000 participantes (cada cliente com seu atendente) fazendo requisições e o servidor respondendo a mesma coisa.

 

Falando em bytes, teremos aproximadamente 32 bytes apenas de cabeçalhos e 27 bytes para o corpo da requisição, para cada requisição.

 

Se efetuarmos 1000 requisições, teremos um tráfego de 59000 bytes em requisições e 51000 bytes em respostas, se fizermos 2000 requisições (clientes e atendentes), teremos 118.000 e 102.000 bytes por segundo.

 

Em 1 hora de uso do chat teremos 792.000.000 bytes e, se essa aplicação funcionar 8 horas por dia, durante 22 dias, teremos 139.392.000.000 bytes trafegados entre cliente e servidor.

 

Não é a sua situação, mas vai ser uma parecida.

 

 

# Eu estava realmente pensando nisso agora, agora, em questão de quantos usuarios estiverem online no site e essa atualização de 5 em e 5 seg ou minutos, isso iria ser uma #@?$%~ dor de cabeça, valeu cara pelo toque ai também.

 

# Ah, me da uma força nesse item aqui ->> select-retorna-o-ultimo-valor-fixo-php

 

 

VALEU :D

Compartilhar este post


Link para o post
Compartilhar em outros sites

Sei que pra fazer isso precisa de peito, e muitos não tem

 

mas mesmo assim vou postar um exemplo, afinal aprender nunca é demais

 

arquivo opagina.php

<?php
session_start();
$_SESSION[id] = '2'; //recupera o id do user

$id = $_SESSION[id];

session_commit();

?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Atualiza</title>
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function busca(value){

 $.post("apagina.php",{iddopost:value},function(data){ $("#r").html(data)})

 }

 var id = <?php echo $id; ?>;

setInterval('busca(id)', 10000);

</script>
</head>

<body>
<h1>Verifica a cada 10 segundos</h1>
<div id="r"></div>
</body>
</html>

 

pagina apagina.php

<?php

if(isset($_POST['iddopost'])){

mysql_connect('localhost','root','');
mysql_select_db('atual');


$o = $_POST['iddopost'];

$p = mysql_query("SELECT * FROM atual WHERE id='{$o}'");
$c = mysql_num_rows($p);

if($c == '0'){


echo "<script language= \"JavaScript\">";
echo "location.href=\"http://www.google.com\""; //coloque sua index
echo "</script>";

} 


}
?>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cristiano Cordeiro, isso é errado:

$_SESSION[id]

Motivos: Não se procura constante dentro de índice de array, como você não tem 'id' definido, o PHP simplesmente vai procurar por uma constante como índice do array, se você habilitar as mensagens de erro, provavelmente isso vai dar erro.

 

Você piorou a situação, usou jQuery.

Compartilhar este post


Link para o post
Compartilhar em outros sites

qual é o jeito certo

Se o índice for string, use:

$_SESSION[ 'id' ]  ou $_SESSION[ "id" ]

 

Se o índice for numérico, use:

$_SESSION[ 5 ] , ( de acordo com posição no array )

 

qual é o problema do jquery ?

Desnecessário nessa situação, você poderia ter implementado o AJAX ( que também é totalmente errado nesse caso ) com o JavaScript puro , de forma mais genérica, usando o XMLHttpRequest , ActiveXObject.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Você leu minhas respostas ao decorrer do tópico ? se você está verificando a cada atualização ( navegação ) de página se o usuário existe no banco, você pode até resolver isso de forma mais eficiente, ao invés de usar um 'SELECT * FROM' e fazendo um if na contagem de linhas retornadas, você pode usar um SELECT COUNT( * ) FROM .. que é bem mais rápido, se der 0, e porque não existe, então você remove os dados da session do cara, ou seja, ele não está mais logado

Compartilhar este post


Link para o post
Compartilhar em outros sites
então você remove os dados da session do cara, ou seja, ele não está mais logado
, porem ele permanece na pagina, pois não sera radirecionado.Não seria uma falha de segurança, users sem permição navegando em pagina de um user, ou seja não estando logado? (no caso de exclusão,com user logado)

Compartilhar este post


Link para o post
Compartilhar em outros sites

então você remove os dados da session do cara, ou seja, ele não está mais logado , porem ele permanece na pagina, pois não sera radirecionado.Não seria uma falha de segurança, users sem permição navegando em pagina de um user, ou seja não estando logado?

Cara, vou dizer que você está totalmente alienado, ou não sabe nem do que você está falando ou discutindo, um sistema de login é feito em várias etapas, verificação, liberação de uso, verificação de dados, em uma dessas etapas está a parte que verifica se a sessão está setada ,se não estiver é feito o redirecionamento pra página de login.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Uma situação é muito diferente da outra, 'o proposto' nesse tópico, era impedir o uso do sistema quando um usuário for excluído por um administrador, o que você deseja é fazer algo quando o browser for fechado de várias formas, nessa situação, eu faria um timer.

Compartilhar este post


Link para o post
Compartilhar em outros sites
fazer algo quando o browser for fechado de várias formas

não, acho que voce não me entendeu, o que quero é bloquear logins simultaneos, e logins com users diferentes em mesma maquina

 

faria um timer

,hen????

como??

oque é?

Compartilhar este post


Link para o post
Compartilhar em outros sites

O timer seria pro caso de uma verificação 'depois de tanto tempo' sem atividade, removeria alteraria o valor no banco, 'logado' pra 0, se você deseja bloquear logins simultâneos na mesma maquina, verifica se já tem uma sessão setada ou cookie setado.

 

Utilize a idéia que foi dada do banco de dados, você faz o seguinte, cria uma tabela 'logged', com os campos 'usuario' , 'ip' , 'tempo'

em tempo, você vai gravar um timestamp ao invés da data, assim fica mais fácil manipular no timer, então você cria uma função que vai ser utilizada globalmente por todas as páginas, verificando se o tempo de inatividade é maior que 10, por exemplo, isso no banco de dados, se for, você deleta o registro da tabela, então ele estará liberado pra fazer outro login, se não for maior que 10, quando a mesma pessoa tentar logar novamente, você vai selecionar nessa tabela, verificando se tem um registro pra esse login lá, se estiver, você não permite a entrada. Porque o timer ? porque você pode ter várias pessoas utilizando o sistema, e ele não vai valer pra você e sim pra todos, então de 10 pessoas no sistema, 3 estão usando, 9 estão inativas pro almoço, ou seja, não estão utilizando, portanto consideramos essas pessoas com o navegador fechado, você também pode gravar cookies, com um código para reativar o uso do login na página sem a necessidade do usuário efetuar a login novamente, mas se ele não tiver esse cookie setado, você força a entrada, pode ser com session também, como ele não vai ter fechado o browser( teoricamente ).

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.