Foros del Web » Programando para Internet » PHP »

usuarios registrados

Estas en el tema de usuarios registrados en el foro de PHP en Foros del Web. Hola... Tengo un sitio donde los usuarios al registrarse le doy valor a una $_SESSION de su login y password. Cómo puedo saber la cantidad ...

  #1 (permalink)  
Antiguo 25/11/2003, 17:47
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
usuarios registrados

Hola...

Tengo un sitio donde los usuarios al registrarse le doy valor a una $_SESSION de su login y password.

Cómo puedo saber la cantidad de usuarios conectados y cuales usuarios son?

gracias
  #2 (permalink)  
Antiguo 26/11/2003, 00:49
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Para saber cuántos usuarios conectados tienes, hay un script en las FAQ's...
Ahora, lo que puedes hacer es crear una tabla en tu BD que tenga como mínimo la siguiente estructura:
CREATE TABLE sesiones (
usuario_nombre varchar(25) NOT NULL,
tiempo varchar(14) NOT NULL,
invitado int(1) NOT NULL,
);
Y utilizar una función como la que sigue:
Código PHP:
<?php
function online(){
    if (!isset(
$_SESSION['usuario_nombre'])){
        
$usuario_nombre $_SERVER['REMOTE_ADDR'];
        
$invitado 1;
    }else{
        
$usuario_nombre $_SESSION['usuario_nombre'];
        
$invitado 0;
    }
    
$pasado time()-900;//900 segundos. Cambiar por el plazo que se quiera dar al usuario para realizar alguna acción (recargar por ejemplo).
    
$sql "DELETE FROM sesiones WHERE tiempo < $pasado";
    
mysql_query($sql);
    
$sql "SELECT tiempo FROM sesiones WHERE usuario_nombre='$usuario_nombre'";
    
$result mysql_query($sql);
    
$tiempo time();
    if (
mysql_num_rows($result) == 1){
        
$sql "UPDATE sesiones SET usuario_nombre='$usuario_nombre', tiempo='$tiempo', invitado='$invitado' WHERE usuario_nombre='$usuario_nombre'";
    }else{
        
$sql "INSERT INTO sesiones (usuario_nombre, tiempo, invitado) VALUES ('$usuario_nombre', '$tiempo', '$invitado')";
    }
    
mysql_query($sql);
}
?>
Esta función la saqué no recuerdo de dónde, pero creo que el php-nuke utiliza algo así... Tal vez podría haber problemas si se utiliza ips compartidas... pero creo que como idea está buena... por ahí sería mejor utilizar el SESSID... no lo he pensado.
Se debe llamar a esta función cada vez que se carga (o recarga) una página.
Para obtener el número de visitantes activos, debrás utilizar un código como el siguiente:
Código PHP:
$sql "SELECT usuario_nombre FROM sesiones WHERE invitado=0";
$result mysql_query($sql);
$total_registrados mysql_num_rows($result);
echo 
"En línea:<br />";
echo 
"Usuarios registrados: ".$total_registrados."<br />";
while (
$row mysql_fetch_array($result)){
    echo 
$row['usuario_nombre']."<br />";
}

$sql "SELECT * FROM sesiones WHERE invitado=1";
$result mysql_query($sql);
$total_invitados mysql_num_rows($result);
echo 
"Invitados: ".$total_invitados."<br />";
echo 
"Total usuarios en línea: ".($total_invitados $total_registrados)."<br />"
Espero te sirva... si no entiendes algo, pregunta aquí mismo. Y a quien tenga una idea de cómo resolver el problema de las ip's, también postear por favor.
Saludos

Última edición por jpinedo; 26/11/2003 a las 21:25
  #3 (permalink)  
Antiguo 26/11/2003, 01:13
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
gracias, voy a revisarla.

tengo el interés de hacer en mi web algo como el phpnuke, que indica al usuario registrado quienes y cuantos usuarios hay. también, no sé, si pueda utilizar nada más que ese módulo del phpnuke.

Pero, es necesario acceder a la base de datos? no existe otra forma de hacerlo utilizando las SESSION?

gracias
  #4 (permalink)  
Antiguo 26/11/2003, 06:19
Avatar de drcyber  
Fecha de Ingreso: julio-2002
Mensajes: 826
Antigüedad: 15 años, 4 meses
Puntos: 2
Interesante lo que dice araujo_guntin...

¿Será posible contabilizar la cantidad de sesiones activas en el servidor?

Muy interesante realmente...
__________________
Dr. Cyber
Ingeniarte.com
(soy el mismo Takitei)
  #5 (permalink)  
Antiguo 26/11/2003, 08:11
Avatar de claudiovega  
Fecha de Ingreso: octubre-2003
Ubicación: Puerto Montt
Mensajes: 3.667
Antigüedad: 14 años, 1 mes
Puntos: 11
respecto de lo que dice drcyber, valdria de algo contar los archivos existentes en /php/sessions (el directorio de las sesiones).
__________________
Dedicado a proyectos web, actualmente desarrollando un sistema de diseño de flyers online muy fácil de usar.
  #6 (permalink)  
Antiguo 26/11/2003, 08:28
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Hola,
Cita:
Mensaje Original por claudiovega
respecto de lo que dice drcyber, valdria de algo contar los archivos existentes en /php/sessions (el directorio de las sesiones).
Si es que esta accesible, que por seguridad no debe estarlo. Ademas, creo que drcyber se referia mas bien a dominio, no a servidor.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #7 (permalink)  
Antiguo 26/11/2003, 09:00
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
Sobre el tema de "contar" los archivos de sesión creados en el directorio que los almacenes (que podría ser definido para ese dominio/aplicación en concreto con session_save_path() por ejemplo ...) no sería del todo "real". Un "SID" (identificativo único de sesión) es válido hasta que su tiempo de expiración así lo determina .. pero .. el archivo fisicamente hasta que se ejecuta el proceso de "garbage" (recolector de basura) que borra el archivo fisicamente. Mientras tanto .. puedes tener sesiones no validas y archivos de sesión en ese directorio ..

Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #8 (permalink)  
Antiguo 26/11/2003, 09:28
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
entonces, qué solución tenemos para saber cuántos usuarios están conectados al sitio?
  #9 (permalink)  
Antiguo 26/11/2003, 09:33
Ex Colaborador
 
Fecha de Ingreso: junio-2002
Mensajes: 9.091
Antigüedad: 15 años, 6 meses
Puntos: 16
Pues mas o menos como ha puesto jpinedo.

Saludos.
__________________
Josemi

Aprendiz de mucho, maestro de poco.
  #10 (permalink)  
Antiguo 26/11/2003, 10:17
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
gracias, y cómo puedo reutilizar el módulo de phpnuke que me sirve para manipular los usuarios registrados y online?
  #11 (permalink)  
Antiguo 26/11/2003, 11:15
O_O
 
Fecha de Ingreso: enero-2002
Ubicación: Santiago - Chile
Mensajes: 34.417
Antigüedad: 15 años, 11 meses
Puntos: 126
araujo_guntin .. Si no vas a usar PHP-Nuke por completo y sólo te interesa un "modulo" .. debes de consguirte una aplicación que haga eso por si sola .. date cuenta que son "modulos" y como tal requieren (es probable) de un montón de librerias comunes (para eso es un módulo que forma parte de ese sistema).

Aplicaciones "multiproposito" para gestionar usuarios (registro, .. login .. etc) tienes muchas hechas .. las cuales están (suelen) diseñadas para que lo adaptes a tus aplicaciones.

Un ejemplo sería más o menos lo que puso jpinedo .. se basa en la tabla de usuairos (SQL) que puso ..así que sólo tienes que hacerte algunos scripts para la creación del usuario en sí y añadir más campos si necesitas que tus usuarios sean registrados bajo una contraseña ..

Mas Ejemplos tienes en:
http://www.hotscripts.com/PHP/Script...ion/index.html
y
http://www.hotscripts.com/PHP/Script...ent/index.html


Un saludo,
__________________
Por motivos personales ya no puedo estar con Uds. Fue grato haber compartido todos estos años. Igualmente los seguiré leyendo.
  #12 (permalink)  
Antiguo 26/11/2003, 14:59
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
gracias a todos, cuando termine con el proyecto les comentaré

Saludos Araujo
  #13 (permalink)  
Antiguo 28/11/2003, 20:52
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
hola...

encontré un scrip en hotscript.com (useronline) que me indica cuantos usuarios están online en 60 segundos. no utiliza base de datos las sessiones las guarda en un fichero texto.

Ahora, conocen ustedes algún paquete que me indique cuales son los usuarios registrados que se encuentras online?

espero que ya esté hecho, gracias
  #14 (permalink)  
Antiguo 29/11/2003, 01:39
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... más de uno (2) me preguntó por el script que puse arriba... dicen que no funciona y da errores en el SQL...

Voy a hacer algunas aclaraciones:

ANTES DE PRIMERO:Crear una tabla que tenga como mínimo esta estructura:(Si no... nada va a funcionaar)...
Código:
CREATE TABLE sesiones (
usuario_nombre varchar(25) NOT NULL,
tiempo varchar(14) NOT NULL,
invitado int(1) NOT NULL
);
PRIMERO:
Si se necesita saber la cantidad de usuarios on line diferenciando cuántos son registrados y cuántos no (invitados)... pues es evidente que hay que tener antes algún sistema de autentificación y registro de usuarios... si no, todos serán invitados.

SEGUNDO:
En el script no puse las conexiones a la BD porque asumí que lo harían.. por eso sale algún error por ahí... y el script, obviamente, no funciona.

TERCERO:
Las funciones por sí solas no se ejecutan... hay que llamar a la función.

El script sería así:
Un archivo "seguridad.php" que contiene la conexión a la BD:
seguridad.php
Código PHP:
<?php 
$servidor
="localhost";
$usuario="tu_user"
$password="tu_password";
$base="tu_bd";
$con mysql_connect($servidor,$usuario,$password) or die ("Error en la conexión con BD ".mysql_error());
mysql_select_db($base,$con) or die ("Error al seleccionar BD ".mysql_error());
?>
Un archivo "funcionOnLine.php" que contiene la función:
funcionOnLine.php
Código PHP:
function online(){
    if (!isset(
$_SESSION['usuario_nombre'])){
        
$usuario_nombre $_SERVER['REMOTE_ADDR'];
        
$invitado 1;
    }else{
        
$usuario_nombre $_SESSION['usuario_nombre'];
        
$invitado 0;
    }
    include (
"seguridad.php");
    
$pasado time()-900;//900 segundos. Cambiar por el plazo que se quiera dar al usuario para realizar alguna acción (recargar por ejemplo).
    
$sql "DELETE FROM sesiones WHERE tiempo < $pasado";
    
mysql_query($sql);
    
$sql "SELECT tiempo FROM sesiones WHERE usuario_nombre='$usuario_nombre'";
    
$result mysql_query($sql) or die ("Error en función online (leer) :".mysql_error());
    
$tiempo time();
    if (
mysql_num_rows($result) == 1){
        
$sql "UPDATE sesiones SET usuario_nombre='$usuario_nombre', tiempo='$tiempo', invitado='$invitado' WHERE usuario_nombre='$usuario_nombre'";
    }else{
        
$sql "INSERT INTO sesiones (usuario_nombre, tiempo, invitado) VALUES ('$usuario_nombre', '$tiempo', '$invitado')";
    }
    
mysql_query($sql) or die("Error en función online (actualizar) :".mysql_error);

Y listo... en cada página de nuestro site se debe incluir las siguientes líneas:
Código PHP:
include ("funcionOnLine.php");
online() 
Hasta aquí se ha actualizado la Bd cada vez que se cargue una página... Entonces... en este punto tenemos una tabla en la Bd con todos los visitantes... sólo faltaría mostrarlos en pantalla.

En el lugar donde queremos mostrar el número de visitantes escribimos:
Código PHP:
include ("seguridad.php");//conexión con BD
$sql "SELECT usuario_nombre FROM sesiones WHERE invitado=0";
$result mysql_query($sql);
$total_registrados mysql_num_rows($result);
echo 
"En línea:<br />";
echo 
"Usuarios registrados: ".$total_registrados."<br />";
while (
$row mysql_fetch_array($result)){
    echo 
$row['usuario_nombre']."<br />";
}

$sql "SELECT * FROM sesiones WHERE invitado=1";
$result mysql_query($sql);
$total_invitados mysql_num_rows($result);
echo 
"Invitados: ".$total_invitados."<br />";
echo 
"Total usuarios en línea: ".($total_invitados $total_registrados)."<br />"
Ahora sí ya debería funcionar sin problemas... Si no se tiene un sistema de autentificación de usuarios... siempre saldrá
registrados:0
invitados:(los que hayan)
Yo lo probé con el Autentificator (de Cluster) y funciona bien sólo que habría que cambiar el nombre de las variables de sesion $_SESSION['usuario_nombre'] por $_SESSION['usuario_login']... Cada uno lo adapta a sus necesidades y a su sistema de autentificación.

Espero que ahora sí haya quedado clarísimo para todos (si está como para FAQ)...

Saludos

Última edición por jpinedo; 29/11/2003 a las 01:43
  #15 (permalink)  
Antiguo 30/11/2003, 16:53
Avatar de bichomen  
Fecha de Ingreso: junio-2003
Ubicación: Barcelona y alrededores, España
Mensajes: 874
Antigüedad: 14 años, 6 meses
Puntos: 2
No acaba de rular del todo al menos a mi, me salta las ips, en lugar de los nombres de los usuarios
__________________
"Se sabe con exactitud, con cuanta imprecisión, se sabe algo"
Linux Registered User #320332
  #16 (permalink)  
Antiguo 30/11/2003, 18:51
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Es que si tu usuario no está autentificado, lo que se cuenta es la dirección ip... Como te dije.. para que funcione debes tener algún sistema de registro y autentificación de usuarios...

Si ya lo tienes, se supone que la autentificación debe funcionar con sesiones y almacenar el nombre de usuario en una sesión...

Pues el script que yo puse supone que todo el proceso anterior ya está hecho y que el nombre del usuario se garda en la variable de sesión $_SESSION['usuario_nombre']...

Hata acá mi script no ha hecho nada...

Por eso, describe cómo funciona tu sistema de autentificación (sesiones, cookies) y la variable donde guardas el nombre de usuario.. con esos datos te puedo ayudar a adaptar el script.

Saludos
  #17 (permalink)  
Antiguo 01/12/2003, 01:15
 
Fecha de Ingreso: febrero-2003
Mensajes: 165
Antigüedad: 14 años, 10 meses
Puntos: 0
gracias jpinedo,

Todo me funciona de maravillas. Además de mostrar los nombres de los usuarios online, utilizando la base de datos, puedo lograr que estos se comuniquen entre sí.

ah, a tu script está perfecto.

ahora pretendo no solo utilizar las variables de sessión para la autentificación. también quiero utilizar cookies.

seguiré estudiando el tema, y preguntando en la lista.
  #18 (permalink)  
Antiguo 16/07/2005, 15:47
 
Fecha de Ingreso: mayo-2005
Mensajes: 49
Antigüedad: 12 años, 7 meses
Puntos: 0
ami me da error en la consulta al mostrar al parecer por no usar las variables sessions para usuarios...

Osea solo uso el code como dices, y no me sirve da error y no ingresa los datos a la db... debo tener algo de
Código PHP:
if (!isset($_SESSION['usuario_nombre'])){ 
por ke no uso nada de @session y al ver un isset pues no se ke hacer//

Última edición por darksteel01; 16/07/2005 a las 16:16
  #19 (permalink)  
Antiguo 16/07/2005, 16:34
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
darksteel01:
Ya casi no recuerdo las dudas de los usuarios respecto a este código. Sería bueno que leas a partir del post #14 de este mismo tema porque creo que traté de explicarlo con el mayor detalle posible.

Si te sigue dando error, por favor da todos los detalles que puedas.

Saludos
  #20 (permalink)  
Antiguo 16/07/2005, 16:57
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
a mi me funciona bien, con la cuestion de ke me muestra a mi como invitado y como registrado o sea total de usuarios en linea: 2 y ambos soy yo como registrado y como anonimo, a ke se debe ?
  #21 (permalink)  
Antiguo 16/07/2005, 17:25
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Eso debe ser porque antes de loguearte ya te reconoció como invitado.
entonces según esta línea:
Código PHP:
$pasado time() - 900
Deberán pasar 900 segundos de inactividad de esa IP para que se elimine.

Saludos
  #22 (permalink)  
Antiguo 16/07/2005, 17:36
 
Fecha de Ingreso: mayo-2005
Mensajes: 49
Antigüedad: 12 años, 7 meses
Puntos: 0
Oks, el problema es que yo tengo un sistema de usuarios qu ehize este no guarda session en ninguna parte solo guardo cookie que creo ke es diferente...
  #23 (permalink)  
Antiguo 16/07/2005, 18:03
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
pues prueba cambiando donde veas $_SESSION[nombre_usuario] por $_COOKIE[nombre_usuario] o como tu lo hayas llamado, creo ke asi deberia de funcionarte

Un saludo
  #24 (permalink)  
Antiguo 16/07/2005, 18:06
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Bueno... el tema no es de dónde se lea esa variable... sino que exista.
En tu caso si tienes una cookie llamada 'usuario_nombre', sólo cambias $_SESSION['usuario_nombre'] por $_COOKIE['usuario_nombre'] y no habrá problemas.

Saludos
  #25 (permalink)  
Antiguo 16/07/2005, 18:09
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
Jejeje... ZydRick: me ganaste por puesta de mano.
Finalmente respondimos lo mismo.
Sólo algo importante:
Ya que los índices de los arrays asociativos son cadenas, deben colocarse entre comillas.
No se debe utilizar $_SESSION[nombre_usuario] sino $_SESSION['nombre_usuario'] o $_SESSION["nombre_usuario"].
Aunque sin comillas funciona, el manual recomienda evitarlo debido a posibles conflictos con constantes definidas por el usuario o predefinidas en futuras versiones de PHP.

Saludos
  #26 (permalink)  
Antiguo 16/07/2005, 18:28
 
Fecha de Ingreso: mayo-2005
Mensajes: 49
Antigüedad: 12 años, 7 meses
Puntos: 0
Gracias si funciona !
  #27 (permalink)  
Antiguo 16/07/2005, 18:30
Avatar de ZydRick  
Fecha de Ingreso: febrero-2005
Ubicación: Lima
Mensajes: 750
Antigüedad: 12 años, 10 meses
Puntos: 4
por nada, estamos para ayudarnos todos :)
  #28 (permalink)  
Antiguo 16/07/2005, 19:25
 
Fecha de Ingreso: mayo-2005
Mensajes: 49
Antigüedad: 12 años, 7 meses
Puntos: 0
ok ahora me pasa cuando me deslogeo o borro cookie me kedo como Usuario e Invitado.


Cita:
usuario_nombre

tiempo

invitado
Editar Borrar 66.50.24.158 1121565583 1
Editar Borrar [darksteel] 1121565579 0
ven los 2 soy yo...

Última edición por darksteel01; 16/07/2005 a las 20:52
  #29 (permalink)  
Antiguo 16/07/2005, 21:36
Avatar de jpinedo
Colaborador
 
Fecha de Ingreso: septiembre-2003
Ubicación: Lima, Perú
Mensajes: 3.120
Antigüedad: 14 años, 2 meses
Puntos: 41
¿Y cuál es el problema?
Ya he explicado que así debe ser, pues recién se borrarán los que no tengan actividad en 900 segundos.
Si quieres que sea más preciso, reduce ese número. O incluye en el login, la eliminación del registro con tu IP. Y en el logout, la eliminación del registro con tu username.

Saludos
  #30 (permalink)  
Antiguo 16/07/2005, 21:44
 
Fecha de Ingreso: mayo-2005
Mensajes: 49
Antigüedad: 12 años, 7 meses
Puntos: 0
Cita:
Iniciado por jpinedo
¿Y cuál es el problema?
Ya he explicado que así debe ser, pues recién se borrarán los que no tengan actividad en 900 segundos.
Si quieres que sea más preciso, reduce ese número. O incluye en el login, la eliminación del registro con tu IP. Y en el logout, la eliminación del registro con tu username.

Saludos
si eso mismo estaba tratando :D Thx
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 11:18.