Jump to content
Fórum Script Brasil
  • 0

Chat em PHP - Resgatando Sessions...


rsmoraes

Question

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

1 answer to this question

Recommended Posts

  • 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!

Edited by Churc
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...