Foros del Web » Programando para Internet » PHP »

usuarios online

Estas en el tema de usuarios online en el foro de PHP en Foros del Web. quisiera saber como hacer para saber que usuarios estan online. no cuantos, sino saber cuales usuarios registrados en mi BD estan online y cuales no, ...
  #1 (permalink)  
Antiguo 20/02/2004, 19:33
 
Fecha de Ingreso: agosto-2003
Mensajes: 39
Antigüedad: 20 años, 8 meses
Puntos: 0
usuarios online

quisiera saber como hacer para saber que usuarios estan online.
no cuantos, sino saber cuales usuarios registrados en mi BD estan online y cuales no, como en los foros que debajo de la bandere dice OFFLINE o ONLINE
  #2 (permalink)  
Antiguo 20/02/2004, 19:35
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Eso lo puedes solucionar tomando el control de tus sesiones, por ejemplo en una base de datos, y ahí luego puedes hacer un query para determinar aquellas sesiones que contengan un "NickName" (usuarios) cuyo ultimo acceso sea menor a X segundos.

__________________
Manoloweb
  #3 (permalink)  
Antiguo 20/02/2004, 19:48
 
Fecha de Ingreso: agosto-2003
Mensajes: 39
Antigüedad: 20 años, 8 meses
Puntos: 0
bueno como yo soy algo nuevo en esto, no se mucho sobre lo que me dices, podrias darme algun ejemplo del codigo que necesitaria para poder hacer esto?

Última edición por soud; 20/02/2004 a las 20:01
  #4 (permalink)  
Antiguo 20/02/2004, 20:02
Avatar de Manoloweb  
Fecha de Ingreso: enero-2002
Ubicación: Monterrey
Mensajes: 2.454
Antigüedad: 22 años, 3 meses
Puntos: 5
Wow, pues la verdad que es un poco mas complejo que simplemente ponerte una lineas, pero aqui va un poco...

1.- Debes modificar la forma en la que tu pagina administra las sesiones, una forma púede ser a traves del .htaccess

.htaccess
=========================
php_value session.save_handler 'user'
php_value session.save_path 'php_sessions'
php_value auto_prepend_file 'home/path/mysql_session_handler.php'
=========================

Una vez hecho eso, debes crear unas funciones para administrar tu sesion, aqui te pongo una que uso yo:

mysql_session_handler.php
Código PHP:
<?php
assert
(ini_get('session.save_handler') == 'user');
if (
$mysql_session_table ini_get('session.save_path')) {
    
$mysql_session_table 'php_sessions';
}
$mysql_session_handle null;
function 
mysql_session_open($save_path$session_name)
{
    global 
$mysql_session_handle;
    include_once (
"../constantes_co_es.php");
    
// Aqui sustituyes los datos de tu conexion a la BD
    
$host=BD_HOST;
    
$user=BD_USUARIO;
    
$pass=BD_PASSWORD;
    
$dbas=BD_BASE;
    
$mysql_session_handle mysql_connect($host,$user,$pass);
    
mysql_select_db($dbas,$mysql_session_handle);
    return 
$mysql_session_handle;
}
function 
mysql_session_close()
{
    global 
$mysql_session_handle;

    if (isset(
$mysql_session_handle)) {
        return 
mysql_close($mysql_session_handle);
    }

    return 
true;
}
function 
mysql_session_read($key)
{
    global 
$mysql_session_handle$mysql_session_table;

    
$key mysql_escape_string($key);
    
$now time();
    
$query "select data from $mysql_session_table " .
             
"where session_id = '$key';";
    
$result mysql_query($query,$mysql_session_handle);
    if ((
$result === false) || (mysql_num_rows($result) != 1)) {
        
$query "insert into $mysql_session_table " .
                 
"(session_id, last_active, data) " .
                 
"values('$key', $now, '');";

        
$result mysql_query($query$mysql_session_handle);
        if ((
$result !== false) && (@mysql_affected_rows($result) == 1)) {
            @
mysql_free_result($result);
            return 
'';
        }
        
$query "select data from $mysql_session_table " .
                 
"where session_id = '$key';";
        
$result mysql_query($query,$mysql_session_handle);
        if ((
$result === false) || (@mysql_num_rows($result) != 1)) {
            @
mysql_free_result($result);
            return 
'';
        }
    }
    
$data mysql_result($result0'data');
    @
mysql_free_result($result);
    return 
$data;
}
function 
mysql_session_write($key$val)
{
    global 
$mysql_session_handle$mysql_session_table;

    
$key mysql_escape_string($key);
    
$val mysql_escape_string($val);
    
$now time();
    
$query "update $mysql_session_table set last_active=$now, data='$val' " .
             
"where session_id='$key';";

    
$result mysql_query($query,$mysql_session_handle);

    
$success = ($result !== false);
    @
mysql_free_result($result);
    return 
$success;
}
function 
mysql_session_destroy($key)
{
    global 
$mysql_session_handle$mysql_session_table;

    
$key mysql_escape_string($key);
    
$query "delete from $mysql_session_table where session_id = '$key';";
    
$result mysql_query($query,$mysql_session_handle);
    
$success = (($result !== false) && (@mysql_affected_rows($result) == 1));
    @
mysql_free_result($result);

    return 
$success;
}
function 
mysql_session_gc($maxlifetime)
{
    global 
$mysql_session_handle$mysql_session_table;

    
$expiry time() - $maxlifetime;
    
$query "delete from $mysql_session_table where last_active < $expiry;";

    return (
mysql_query($query,$mysql_session_handle) !== false);
}

/* Aqui le indicas a PHP que funciones administran que partes de la sesion. */
session_set_save_handler(
    
'mysql_session_open',
    
'mysql_session_close',
    
'mysql_session_read',
    
'mysql_session_write',
    
'mysql_session_destroy',
    
'mysql_session_gc'
);

?>
Por ultimo vas a necesitar una tabla para manejar las sesiones en tu base de datos:

Código:
CREATE TABLE `php_sessions` (
  `session_id` varchar(40) NOT NULL default '',
  `last_active` int(11) NOT NULL default '0',
  `data` text NOT NULL,
  PRIMARY KEY  (`session_id`)
) TYPE=MyISAM;

Si todo esto te parece demasiado, mejor te recomiendo buscar algun script listo para usar (que desconozco) u olvidarte del tema hasta que mejores tu percepción del PHP.

__________________
Manoloweb
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 20:30.