Ver Mensaje Individual
  #171 (permalink)  
Antiguo 05/11/2005, 13:43
PYTUFYN
 
Fecha de Ingreso: junio-2003
Mensajes: 104
Antigüedad: 21 años, 5 meses
Puntos: 0
Hola a tod@s, tengo implementado este sistema en mi WEB, pero lo que me gustaría es que una vez logeado... bueno, esperad, que aprovecho un mensaje que puse en esta web (FDW) y me ahorro tener que escribirlo otra vez.

Empecemos... En la parte de arriba (de la web, no del foro) tengo una marquesina en la que salen los usuarios totales online (tanto anónimos como registrados, en número) del foro phpBB y los usuarios registrados en línea (conectados).Todo funciona perfectamente, pero me gustaría saber varias cosas.

- En includes/page_header.php del foro, tengo asignado
Código:
time() - 300
por lo que los datos de la parte inferior del foro (usuarios online, invitados, registrados, registrados online) etc se actualizan cada 5 minutos (60*5=300 segundos). Hasta ahí bien, ¿no? Pero mi pregunta es:

¿Se podría hacer algo para que esos datos fueran basados en "tiempo real"? Me explico; si ahora se conectan "Pepe" y "Luis" a las 00:00 en punto, a las 00:01 aparecería:
Código:
En total hay 2 usuarios online :: 2 Registrados, 0 Ocultos y 0 Invitados 
Usuarios Registrados: Pepe, Luis
Pero, si a las 00:02 "Pepe" saliera del foro, seguiría apareciendo como online hasta que pasados 5 minutos se "actualizaría" la lista.

- Me gustaría saber también si se podría hacer algo para que, si "Pepe" se identifica a las 00:00, deja el foro abierto, va a fumarse un cigarro a la terraza y vuelve a las 00:10, al actualizar la web pasados esos 10 minutos, siguiera apareciendo online sin necesidad de volverse a loguear otra vez.

- Si ponemos el mismo caso de "Pepe", pero esta vez en lugar de dejar abierta la web, la cierra y pasados 10 minutos vuelve... cómo podría quedarse logueado SIEMPRE incluso cuando al loguearse ha activado lo de "Entrar automáticamente en cada visita"?

- La conclusión de todo esto es: que los datos online sean a tiempo real. Es decir, que si "Pepe" se loguea, aparezca SIEMPRE como usuario conectado, siempre y cuando tenga la web abierta, claro; y que si la cierra y vuelve, no tenga que identificarse de nuevo.

Por ejemplo, lo que quiero es que yo me identifico, me quedo inactivo todo un día con la web abierta y al día siguiente cuando "actualice" o vaya a otra sección, siga apareciendo como usuario online sin desidentificarme del foro y sin necesidad de logearme de nuevo.

----------------------------------------

Digo esto porque es un engorro logearse desde mi web (no desde el foro) y por ejemplo a los 5 minutos de estar inactivo volver e ir a cualquier sección y aparecer como deslogueado, es decir, sin el nick por la marquesina de usuarios online, con el formulario de login a rellenar (cuando apenas hace 5 minutos atrás me había identificado) y teniendo que, evidentemente, identificarme de nuevo para aparecer.

Los datos que tengo puestos en el panel de control del foro son estos, por si os hiciera falta saberlos:

Dominio de la Cookie: www.vayanoticia.com
Nombre de la Cookie: vayanoticia
Ruta de la Cookie: /
Cookie segura [ https ]
Si su servidor está corriendo via SSL marque esta opción de otra manera déjelo deshabilitado: Deshabilitado
Duración de la sesión [ segundos ]: 3600 (una hora, no?)

Y este es el código que tengo en un archivo llamado log.php (sacado de este hilo, que es el formulario de login):

Código PHP:
<? 
ob_start
(); 
?><? 
$volver
="../log.php"
define('IN_PHPBB'true); 
$phpbb_root_path = (dirname($_SERVER['PHP_SELF'])=="/foro") ? './' 'foro/'//PATH DEL FORO RESPECTO DEL SCRIPT 
include($phpbb_root_path 'extension.inc'); 
include(
$phpbb_root_path 'common.'.$phpEx); 
$userdata session_pagestart($user_ipPAGE_INDEX); 
init_userprefs($userdata); 
global 
$db$board_config
global 
$HTTP_COOKIE_VARS$HTTP_GET_VARS$SID
$cookiename $board_config['cookie_name']; 
$cookiepath $board_config['cookie_path']; 
$cookiedomain $board_config['cookie_domain']; 
$cookiesecure $board_config['cookie_secure']; 
 
// determinamos si cookie activada sino propagamos sid por url 
if ( !(isset($HTTP_COOKIE_VARS[$cookiename '_sid']) || isset($HTTP_COOKIE_VARS[$cookiename '_data'])) ) 

    
output_add_rewrite_var('sid'$userdata['session_id']); 


// Generate logged in/logged out status 
// 
if ( $userdata['session_logged_in'] ) 

    
$u_login_logout 'login.'.$phpEx.'?logout=true&amp;sid=' $userdata['session_id']; 
    
$l_login_logout $lang['Logout'] . ' [ ' $userdata['username'] . ' ]'

else 

    
$u_login_logout 'login.'.$phpEx
    
$l_login_logout $lang['Login']; 


   
//determinamos si usuario logueado para mostrar en link login o logout 
$log_in_out=( $userdata['session_logged_in'] ) ? ('') : (''); 
// si usuario logueado mostramos su avatar 
if ($userdata['user_id']!=-1

switch (
$userdata['user_avatar_type']) 

case 
$ruta_de_avatar =  "<br><img width=80 height=80 src=http://www.vayanoticia.com/imagenes/noavatarusuario.gif alt=Avarar>";break; 
case 
$ruta_de_avatar =  "<br><img width=80 height=80 alt=Avarar src=\"" $phpbb_root_path .$board_config['avatar_path'] . '/' $userdata['user_avatar'] . "\" >";break; 
case 
$ruta_de_avatar =  "<br><img width=80 height=80 alt=Avarar src=\"" .$userdata['user_avatar'] . "\" >";break; 
case 
$ruta_de_avatar =  "<br><img width=80 height=80 alt=Avarar src=\"" $phpbb_root_path.$board_config['avatar_gallery_path'] . '/' $userdata['user_avatar'] . "\" >";break; 


$log_in_out .= "" $ruta_de_avatar "" $userdata['username'] . ""

else { 
$log_in_out .=""

?>
<? 
print $log_in_out.""
if (!
$userdata['session_logged_in']) 

?>
  <form action="<?=$phpbb_root_path?>login.php" method="post">
    <input type="hidden" name="redirect" value="<?=$volver?>?sid=<?=$userdata['session_id']?>">
    <br>
    Usuario<br>
    <input type="text" name="username" size="10"/>
    <br>
    Contrase&ntilde;a<br>
    <input type="password" name="password" size="10" maxlength="32"/>
    <br />
    &nbsp;&nbsp; &nbsp;&nbsp;Recordarme 
    <input name="autologin" type="checkbox" class="text" checked />
    &nbsp;&nbsp;&nbsp; <br>
    <input type="submit" class="mainoption" name="login" value="conecta!">
  </form>
  <?
else 


        
$sql mysql_query("SELECT g.group_id, g.group_name, g.group_type, ug.user_pending 
            FROM " 
GROUPS_TABLE " g, " USER_GROUP_TABLE " ug 
            WHERE ug.user_id = " 
$userdata['user_id'] . "   
                AND ug.group_id = g.group_id 
                AND g.group_single_user <> " 
TRUE 
            ORDER BY g.group_name, ug.user_id"
); 
$cont=1
while(
$row=mysql_fetch_array($sql)) 
$grupos.="".$row['group_name'].","
if ( 
$userdata['user_new_privmsg'] ) 
    { 
    
$l_message_new = ( $userdata['user_new_privmsg'] == ) ? $lang['New_pm'] : $lang['New_pms']; 
    
$l_privmsgs_text sprintf($l_message_new$userdata['user_new_privmsg']); 
    } 
else 
    { 
    
$l_privmsgs_text $lang['No_new_pm']; 
    } 
?>
<? 

?><? 
ob_end_flush
();
?>
Este es el código que tengo dentro de la marquesina y en el que aparecen los usuarios registrados online (por si hace falta y ya de paso por si alguien quiere ponerlo en su web):

Código PHP:
<?php 

include('conf.php'); //archivo que conecta con la db


$result=mysql_query("SELECT user_id, username, user_allow_viewonline, user_level, session_logged_in, session_time, session_page, session_ip

    FROM phpbb_users, phpbb_sessions

    WHERE user_id = session_user_id

    AND session_time >= "
.( time() - 300 ) . "

    AND user_id > -1

    ORDER BY username ASC, session_ip ASC"
);

    while(
$row mysql_fetch_array($result)) {

$username $row["username"];

$user_id $row["user_id"];

echo 
"<a href=foro/ver-perfil-de-usuario-$user_id.html target=_blank>$username</a>,";

 } 



 
mysql_free_result($result); 

 
mysql_close(); 

?>
Y este el código que me muestra el total de usuarios online (en número):

Código PHP:
<? include('conf.php'); 
      
$result mysql_query("SELECT count(DISTINCT(session_ip)) FROM phpbb_sessions WHERE session_time >= (".time()."-300)"); 
$row mysql_fetch_row($result);  
$totalusuariosforo $row[0]; {

echo 
"$totalusuariosforo";

 } 

mysql_free_result($result); 

 
mysql_close(); 
?>
Si alguien puede ayudarme, se lo agradecería.

Es que da gusto en sitios como este, por ejemplo, en los que te identificas una vez y estés inactivo o salgas y vuelvas a entrar, sigues apareciendo como identificado porque te guarda las cookies.

En fin, un saludo