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

Chat em PHP - Resgatando Sessions...


rsmoraes

Pergunta

Boa tarde galera, tive um pequeno problema aqui em adaptar um sistema de chat aqui.

Vocês devem conhecer o chat.php parecido com o facebook... gtalk...

Abaixo minha página online.php (que mostra todos os usuários onlines.. e cria uma SESSION lá no final:

$_SESSION['username'] = $s;
O meu problema está na criação da SESSION... Se vários usuários conectarem a esta página.php, a session que será utilizada será a ÚLTIMA... alguém tem alguma ideia ? tem como criar uma nova página para cada usuário que conectar no chat... Entenderam ou ficou muito confuso ? Obrigado.
<?php
   //faça a inclusão da página de conexão criada logo acima
   include "conexao.php"; 

   session_start();
   
   //determina um tempo para a variável $tempo
   $tempo = time();
   
    if (!empty($_SERVER["HTTP_CLIENT_IP"]))
    {
    //check for ip from share internet
    $ip = $_SERVER["HTTP_CLIENT_IP"];
    }
    elseif (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))
    {
    // Check for the Proxy User
    $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
    }
    else
    {
    $ip = $_SERVER["REMOTE_ADDR"];
    }

   //faz uma consulta para verificar se o ip já existe no banco de dados
   $verifica = mysql_query("SELECT * FROM online WHERE ip ='$ip'");

   //retorna a quantidade de linhas da consulta ou seja, pode retornar 0 ou 1 linha
   $linhas  = mysql_num_rows($verifica); 

   //se não existir o ip no banco ele grava um com um tempo determinado
   if($linhas == 0)
   { 
      // gravando o IP e o tempo no DB
      $acrescenta = mysql_query("INSERT INTO online (ip, tempo) VALUES ('$ip','$tempo')");
   }
   else
   { 
      // se o IP já existe ele o pega e atualiza o tempo no DB no IP selecionado
      //pega o IP retornado da consulta
      $ip = mysql_result($verifica,0,'ip');

      //faz um update para o registro do IP existente
      $atualiza = mysql_query("UPDATE online SET tempo ='$tempo' WHERE ip='$ip'"); 
   }

   //deleta a linha que não foi atualizada no tempo de 400 segundos
   mysql_query("DELETE FROM online WHERE tempo <'$tempo'".-"400");

   //faz uma consulta para mostrar quantos estão on-line 
   $online = mysql_query("SELECT * FROM online"); 
   
   //retorna o número de linhas que será a quantidade de usuários on-line nesse momento
   $agora = mysql_num_rows($online);
   
   if($agora==1){
      //para ficar mais amigável se tiver somente 1 pessoa on-line
      echo "Apenas eu estou on-line";
   }
   
   else {
      //exibe todos os usuários que estão on-line
      echo "Temos ".$agora." usuarios on-line.";
    
   }
            $sql = "select * from online";
            
            $rs = mysql_query($sql);
    
            if(mysql_num_rows($rs) > 0){

            while ($row = mysql_fetch_array($rs)){
            
            $findMat = "select MatFuncionario from acesso where IP = '".$row['ip']."' order by Codigo desc limit 1";
                
            $rsMat = mysql_query($findMat);
            
            $rowMat = mysql_fetch_array($rsMat);
            
                $findNome = "select nome, usuario from funcionario where matricula = '".$rowMat['MatFuncionario']."'";
            
                $rsNome = mysql_query($findNome);
                
                $rowNome = mysql_fetch_array($rsNome);
                
                $nick = $rowNome['usuario'];
                
            echo "<br/><a href=java script:void(0) onclick=java script:chatWith('".$nick."')>".$rowNome['nome']."</a>";
            
                $s = $rowNome['nome'];
    
                $_SESSION['username'] = $s;
    
            }                
   }
   
    
   
?>

Link para o comentário
Compartilhar em outros sites

1 resposta a esta questão

Posts Recomendados

  • 0

opa

num sou dessa área de php e faz tempo que não posto no fórum mass olhando a lógica

O meu problema está na criação da SESSION... Se vários usuários conectarem a esta página.php, a session que será utilizada será a ÚLTIMA... alguém tem alguma ideia ?

Repara que você ta dando um loop aqui

while ($row = mysql_fetch_array($rs))
    {
    $findMat = "select MatFuncionario from acesso where IP = '".$row['ip']."' order by Codigo desc limit 1";
...
e lá embaixo na "sessão" atual do usuário, ou seja, do navegador que está acessando esta página no momento você define um valor que foi pegando no loop ou seja, logicamente sempre vai ficar o último pois é onde o loop para... você não faz nenhum tipo de comparação
se for a máquina do cara o valor atual do loop então $_SESSION['username'] = ...
Agora também não entendo porque você coloca um valor de login de usuário nessa página, não seria melhor colocar isso na página de login? exemplo
quando o usuário fez login, $_SESSION['username'] = $_POST['login'];

enfim se não ajudei espero que não atrapalhei kk

abrs!

Editado por Churc
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,3k
    • Posts
      652,5k
×
×
  • Criar Novo...