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.
1ª- En
includes/page_header.php del foro, tengo asignado
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.
2ª- 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.
3ª- 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"?
4ª- 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_ip, PAGE_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&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 0 : $ruta_de_avatar = "<br><img width=80 height=80 src=http://www.vayanoticia.com/imagenes/noavatarusuario.gif alt=Avarar>";break;
case 1 : $ruta_de_avatar = "<br><img width=80 height=80 alt=Avarar src=\"" . $phpbb_root_path .$board_config['avatar_path'] . '/' . $userdata['user_avatar'] . "\" >";break;
case 2 : $ruta_de_avatar = "<br><img width=80 height=80 alt=Avarar src=\"" .$userdata['user_avatar'] . "\" >";break;
case 3 : $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ña<br>
<input type="password" name="password" size="10" maxlength="32"/>
<br />
Recordarme
<input name="autologin" type="checkbox" class="text" checked />
<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'] == 1 ) ? $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