Foros del Web » Creando para Internet » Sistemas de gestión de contenidos »

Utilizar el [login in], [login out] de phpBB

Estas en el tema de Utilizar el [login in], [login out] de phpBB en el foro de Sistemas de gestión de contenidos en Foros del Web. Buenas, tengo una web que utiliza los foros phpBB y he aprovechado el sistema de login de los foros para toda la web...., pero hay ...
  #1 (permalink)  
Antiguo 18/01/2005, 05:27
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Utilizar el [login in], [login out] de phpBB

Buenas,

tengo una web que utiliza los foros phpBB y he aprovechado el sistema de login de los foros para toda la web...., pero hay una cosa que no consigo hacer y es lo siguiente:

Cuando estoy loguineado en los foros phpBB siempre me sale la opcion de [login out] "nombre usuario", pero en mis demas paginas no(aunke reconocen que esoy loguineado). el diseño que utilizo esta sacado de un template de phpBB que he modificado y he añadido los scipts que utiliza en el pekeño icono de login, pero no se como hacer cambiar ese pekeño icono para que cuando estes loguineado muestre el Login out.

si alguien sabe como hacerlo que me heche una manita.
  #2 (permalink)  
Antiguo 18/01/2005, 08:26
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 11 meses
Puntos: 5
Más o menos sería algo así(pongo la cabecera para seguir sesión phpBB también)

<?
define('IN_PHPBB', true);
$phpbb_root_path = './';
include($phpbb_root_path . 'extension.inc');
include($phpbb_root_path . 'common.'.$phpEx);

//
// Start session management
//
$userdata = session_pagestart($user_ip, PAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
// $log_in_out es una variable que contiene:

//
// LOGIN -> SI EL USUARIO NO ESTÁ CONECTADO
// LOGOUT [NOMBRE_USUARIO] -> SI NO LO ESTÁ
//
// Y REDIRECCIONA A DÓNDE PROCEDE SEGÚN LOGIN/LOGOUT
// GUIÁNDOSE POR $phpbb_root_path
$log_in_out=( $userdata['session_logged_in'] ) ? ('<a href="'.$phpbb_root_path.'login.'.$phpEx.'?logout= true&amp;sid=' . $userdata['session_id'].'">LOGOUT ['.$userdata['username'].']</a>') : ('<a href="'.$phpbb_root_path.'login.'.$phpEx.'">LOGIN</a>');
print $log_in_out;

?>
__________________
[+]
[+]

Última edición por yoseman; 18/01/2005 a las 08:44
  #3 (permalink)  
Antiguo 18/01/2005, 08:29
Avatar de ferny
Il capo della mafia
 
Fecha de Ingreso: febrero-2002
Ubicación: Al final del cable
Mensajes: 10.080
Antigüedad: 22 años, 9 meses
Puntos: 55
Tienes que poner un pequeño código PHP. Si el usuario está logueado, que muestre tal imagen con tal link, y si el usuario no lo está, que muestre tal otra imagen con tal otro link. No es más que poner un IF.
__________________
www.mundodivx.com || www.mundodivx.org

Pon tu mano en un horno caliente durante un minuto y te parecerá una hora.
Siéntate junto a una chica preciosa durante una hora y te parecerá un minuto.
Eso es la relatividad.
  #4 (permalink)  
Antiguo 18/01/2005, 10:13
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
gracias a los dos por responder:

Yoseman eres un fiera el cogigo que me has indicado funciona perfectamente, salvo dos pequeñas problemas que son estos:

1- Estoy logueado en el index o cualquier otra parte de mi web y me sale la opción [login out] bien, pulso y me desloguea correctamente pero al hacerlo aparezco en los foros phpBB.

2- Si por ejemplo me logueo y voy dando un paseo por la web. En caso de que le de a "atras" en la barra de navegacion del explorer, o de que meta una dirección cualquiera de mi web siempre me aparece como si no estuviese logueado. Es muy extraño ya que la session se conseva gracias a tu codigo del principio pero no aparece el [login out] "username". raro raro raro raro raro...

¿que será será? Vega fieras del php se que lo sabeis.
  #5 (permalink)  
Antiguo 18/01/2005, 17:24
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 11 meses
Puntos: 5
Para lo primero he mejorado un poquillo el código, ahora cuando el usuario está logueado te muestra un link para que desloguee, pero si está deslogueado, lo que hace es mostrar un formulario para que loguee que es más lógico.
Código PHP:
<?
define
('IN_PHPBB'true);
$phpbb_root_path './';
include(
$phpbb_root_path 'extension.inc');
include(
$phpbb_root_path 'common.'.$phpEx);

//
// Start session management
//
$userdata session_pagestart($user_ipPAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
$log_in_out=( $userdata['session_logged_in'] ) ? ('<a href="'.$phpbb_root_path.'login.'.$phpEx.'?logout=true&amp;sid=' $userdata['session_id'].'&redirect=./log.php">LOGOUT  ['.$userdata['username'].']</a>') : ('LOGIN');
?>
<div align="center">
<?
print $log_in_out."<br /><br /><br />";
if (!
$userdata['session_logged_in'])
{
?>
<form action="<?=$phpbb_root_path?>login.php" method="post">
<input type="hidden" name="redirect" value="./log.php">
Usuario:&nbsp;<input type="text" name="username" size="10" /><br>
Contrase&ntilde;a:&nbsp;<input type="password" name="password" size="10" maxlength="32" /><br />
&nbsp;&nbsp; &nbsp;&nbsp;Entrar automáticamente en cada visita
        <input class="text" type="checkbox" name="autologin" />

        &nbsp;&nbsp;&nbsp;
        <input type="submit" class="mainoption" name="login" value="Login" />
</form> 
</div>
<?}?>
Hay una serie de cosas que hay que saber.
Código PHP:
$log_in_out=( $userdata['session_logged_in'] ) ? ('<a href="'.$phpbb_root_path.'login.'.$phpEx.'?logout=true&amp;sid=' $userdata['session_id'].'&redirect=./log.php">LOGOUT  ['.$userdata['username'].']</a>') : ('LOGIN'); 
En está línea se crea el link de deslogueo en el que he añadido una variable que se pasa por query string, en concreto redirect, que ha de contener la ruta a dónde quieres que el script redireccione una vez que el script haya deslogueado al usuario, pero relativa a la ruta de phpBB. Por ejemplo en este caso yo puse redirect=./log.php, porque mi script se llamaba así y estaba en la ruta del foro. Si quieres por ejemplo acceder cuando se desloguea desde tu script al índice de tu web, en el caso de que este un directorio por arriba del de phpBB, tendrías que poner redirect=../index.php. Luego también muy importante que la variable phpbb_root_path esté bien asignada(ruta relativa del foro respecto del script) y recuerda que aunque hagas un include de un archivo(por si quieres automatizar este sistema en toda la web) la ruta sigue siendo la del archivo que lo incluye, eso respecto de localizar bien el href del link.
Con eso controlamos a dónde queremos que vaya nuestro script cuando nos deslogueamos. Sólo agregar que no sé porque al postear el código me separa la variable sid en dos trozos, antes de subir el archivo júntalo.
Bueno y ahora tenemos el asunto de dónde redirecciona nuestro script cuando nos logueamos, eso ya lo tratamos en otro tema:

http://forosdelweb.com/showthread.php?t=261850

Código PHP:
<form action="<?=$phpbb_root_path?>login.php" method="post">
<input type="hidden" name="redirect" value="./log.php?sid=<?=$userdata['session_id']?>">
Esas son las dos líneas importantes del asunto, la primera para localizar el script de login.php de phpBB respecto de la ruta de tu script, y la segunda para determinar la dirección a la que se redireccionará una vez realizado el deslogueo. Esa dirección una vez más ha de ser relativa a la dirección dónde se encuentra phpBB, por ejemplo si tenemos nuestro script en un directorio arriba del foro y nuestro foro en el directorio phpBB2 sería(elijo redireccionar al índice del directorio raíz:
Código PHP:
<?
$phpbb_root_path
="phpBB2/";
<
form action="<?=$phpbb_root_path?>login.php" method="post">
<
input type="hidden" name="redirect" value="../index.php?sid=<?=$userdata['session_id']?>">
Cita:
2- Si por ejemplo me logueo y voy dando un paseo por la web. En caso de que le de a "atras" en la barra de navegacion del explorer, o de que meta una dirección cualquiera de mi web siempre me aparece como si no estuviese logueado. Es muy extraño ya que la session se conseva gracias a tu codigo del principio pero no aparece el [login out] "username". raro raro raro raro raro...
Cuando vas navegando por páginas que son ajenas al foro, tienes que encabezar los scripts con el código que hace que persista la sesión, pero en todos, no sé si lo habrás hecho, pero debería de funcionar.
De todas formas si el navegador del cliente tiene desactivadas las cookies de sesión, no habría forma de propagar el identificador de sesión. Lo que hace phpBB es pasar en ese caso por query string el identificador de sesión asignado a la variable sid.
Cómo último recurso yo probaría lo siguiente, en cuatro o 5 scripts de tu página, pasaría por query string en los links para acceder a cada sección el identificador de sesión ?sid=<?=$userdata['session_id']?>
Por ejemplo un link
<a href="./ebooks.php?sid=<?=$userdata['session_id']?>">
Y así con 4 o 5, navega por esos enlaces y prueba a ver que sucede.

A ver si te sirve, yo tambien voy a probar una duda que me ha surgido, si averiguo algo te cuento.

Salu2 ;)
__________________
[+]
[+]
  #6 (permalink)  
Antiguo 18/01/2005, 17:59
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 11 meses
Puntos: 5
He estado probando y amí me funciona propagando el sid por query string fuera de los foros
He puesto cuatro scripts que se llaman entre ellos(en plan cutre eso sí), y que incluyen el archivo que muestra el login/logout del foro
http://elotrositio.tuarrobanet.com/log1.php
http://elotrositio.tuarrobanet.com/log2.php
http://elotrositio.tuarrobanet.com/log3.php
http://elotrositio.tuarrobanet.com/log4.php
El archivo que muestra el login/logout lo puse en la ruta del foro
http://elotrositio.tuarrobanet.com/foro/log.php
aqui están los código:
log1.php
Código PHP:
<?
define
('IN_PHPBB'true);
$phpbb_root_path 'foro/';
include(
$phpbb_root_path 'extension.inc');
include(
$phpbb_root_path 'common.'.$phpEx);

//
// Start session management
//
$userdata session_pagestart($user_ipPAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
include($phpbb_root_path 'log.'.$phpEx);
?>
log1<br>
<a href="log2.php?sid=<?=$userdata['session_id']?>">log2</a><br>
<a href="log3.php?sid=<?=$userdata['session_id']?>">log3</a><br>
<a href="log4.php?sid=<?=$userdata['session_id']?>">log4</a><br>
log2.php
Código PHP:
<?
define
('IN_PHPBB'true);
$phpbb_root_path 'foro/';
include(
$phpbb_root_path 'extension.inc');
include(
$phpbb_root_path 'common.'.$phpEx);

//
// Start session management
//
$userdata session_pagestart($user_ipPAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
include($phpbb_root_path 'log.'.$phpEx);
?>

<a href="log1.php?sid=<?=$userdata['session_id']?>">log1</a><br>
log2<br>
<a href="log3.php?sid=<?=$userdata['session_id']?>">log3</a><br>
<a href="log4.php?sid=<?=$userdata['session_id']?>">log4</a><br>
log3.php
Código PHP:
<?
define
('IN_PHPBB'true);
$phpbb_root_path 'foro/';
include(
$phpbb_root_path 'extension.inc');
include(
$phpbb_root_path 'common.'.$phpEx);

//
// Start session management
//
$userdata session_pagestart($user_ipPAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
include($phpbb_root_path 'log.'.$phpEx);
?>

<a href="log1.php?sid=<?=$userdata['session_id']?>">log1</a><br>
<a href="log2.php?sid=<?=$userdata['session_id']?>">log2</a><br>
log3<br>
<a href="log4.php?sid=<?=$userdata['session_id']?>">log4</a><br>
log4.php
Código PHP:
<?
define
('IN_PHPBB'true);
$phpbb_root_path 'foro/';
include(
$phpbb_root_path 'extension.inc');
include(
$phpbb_root_path 'common.'.$phpEx);

//
// Start session management
//
$userdata session_pagestart($user_ipPAGE_INDEX);
init_userprefs($userdata);
//
// End session management
//
include($phpbb_root_path 'log.'.$phpEx);
?>

<a href="log1.php?sid=<?=$userdata['session_id']?>">log1</a><br>
<a href="log2.php?sid=<?=$userdata['session_id']?>">log2</a><br>
<a href="log3.php?sid=<?=$userdata['session_id']?>">log3</a><br>
log4<br>
En estos cuatro script asignamos la ruta del foro respecto del actual script en phpbb_root_path (foro/ en mi caso) y propagamos identificador de sesión por query string.
Y en el script que se incluye y muestra el login/logout:
Código PHP:
<?
define
('IN_PHPBB'true);
$log_in_out=( $userdata['session_logged_in'] ) ? ('<a href="'.$phpbb_root_path.'login.'.$phpEx.'?logout=true&sid=' $userdata['session_id'].'&redirect=../log1.php">LOGOUT  ['.$userdata['username'].']</a>') : ('LOGIN');
?>
<div align="center">

<?
print $log_in_out."<br /><br /><br />";
if (!
$userdata['session_logged_in'])
{
?>
<form action="<?=$phpbb_root_path?>login.php" method="post">
<input type="hidden" name="redirect" value="../log1.php?sid=<?=$userdata['session_id']?>">
Usuario:&nbsp;<input type="text" name="username" size="10" /><br>
Contrase&ntilde;a:&nbsp;<input type="password" name="password" size="10" maxlength="32" /><br />
&nbsp;&nbsp; &nbsp;&nbsp;Entrar automáticamente en cada visita
        <input class="text" type="checkbox" name="autologin" />

        &nbsp;&nbsp;&nbsp;
        <input type="submit" class="mainoption" name="login" value="Login" />
</form> 
</div><?=$a?>
<?
}?>
redirecciona a ../log1.php cuando uno se desloguea o loguea, y omitimos todo este código:
Código PHP:
$phpbb_root_path 'foro/';
include(
$phpbb_root_path 'extension.inc');
include(
$phpbb_root_path 'common.'.$phpEx);

//
// Start session management
//
$userdata session_pagestart($user_ipPAGE_INDEX);
init_userprefs($userdata);
//
// End session management
// 
ya que el archivo que llama a éste ya lo hace y sino daría error de función redeclarada etc.

A ver si te sirve de algo este ejemplillo.

Salu2 ;)
__________________
[+]
[+]
  #7 (permalink)  
Antiguo 19/01/2005, 06:07
MindPaniC
Invitado
 
Mensajes: n/a
Puntos:
Joder Yoseman menudo fiera del php, Muchas gracias tio por todo el codigo que me has puesto y explicado, me viene de p*** Madre.

Ahora voy a estudiarmelo un pokillo y a amoldarlo a mi web, en caso de que me surja algun problema preguntare de nuevo.

Bye
  #8 (permalink)  
Antiguo 19/01/2005, 10:44
Avatar de yoseman  
Fecha de Ingreso: diciembre-2003
Ubicación: Alicante (Spain)
Mensajes: 471
Antigüedad: 20 años, 11 meses
Puntos: 5
De nada encantado de ayudar :)

Salu2 ;)
__________________
[+]
[+]
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

SíEste tema le ha gustado a 1 personas




La zona horaria es GMT -6. Ahora son las 23:38.