Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Usar sesión de un foro php en mi sitio web hecho en Perl

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Jue Ago 18, 2005 4:15 am
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Usar sesión de un foro php en mi sitio web hecho en Perl Responder citando

Hola,

Estoy haciendo un portal en Perl y MySQL. El sitio web simplemente es una revista, con lo cual se trata de una parte en donde se logean redactores para escribir los artículos y la otra parte es la pública donde simplemente mediante Perl y MySQL se selecciona la información y se imprime. El problema comienza al querer añadirle un foro. No conozco ningún foro decente en Perl + MySQL. Usaría YaBB que es en Perl pero usa txt's y quiero que sea el propio foro el que tenga las fichas de los usuarios con la contraseña, etc. Pensé en usar SMF que es PHP y MySQL pero no doy cogido la sesión de ese foro en PHP y usarla en el resto del sitio web hecho en Perl. He pensado en usar un módulo interprete de PHP, un módulo llamado PHP::Session, módulos tipo CGI::Session o Apache:Session... Pero no me apaño.

A ver si alguien me puede ayudar.

Un saludo
Mensaje Jue Ago 18, 2005 6:56 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Te recomiendo que uses el módulo CGI::Session, es bastante sencillo de usar y uniendolo junto con un databae MySQL puedes tener bastante poder con tus sesiones.

Ahora, en cuanto al foro, no creo que sea muy complicado que puedas fusionar las sesiones de tu foro junto con las de tu sitio, más si ambos estan bajo el mismo dominio.

Lo que debes de hacer es después de seleccionar el foro que deseas, ver como guarda el cookie de la sesión tu foro, es decir con que nombre. Y pues en cualquier parte de tu sitio puedes levantar esa cookie y checar con el database la sesión del usuario. Bastante sencillo hacer esto con perl.


SALUDOS
Mensaje Sab Ago 20, 2005 11:55 am
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Responder citando

Por ejemplo en el caso de phpBB, al principio de cualquiera de sus archivos .php en las primeras lineas se incluye archivos phpBB y comienzo de sesión. Por ejemplo en la página de FAQ este es el gestor de sesiones:
Código:
Código:
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_FAQ);
init_userprefs($userdata);
//
// End session management
//

Después de ejecutar ese código tienes la variable $userdata que incluye la sesión y la información del usuario. Siempre cambiando $phpbb_root_path a la ruta correcta y también me dijeron que tengo que cambiar PAGE_FAQ a -1 que no sé para que es. Para saber si el usuario está logeado hay que usar $userdata['session_logged_in'], y para coger el nombre de usuario: $userdata['username']

Así que no sé como hacerlo desde Perl si es necesario ejecutar ese código en cada página.

Saludos
Mensaje Sab Ago 20, 2005 4:40 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

En la configuración de PHPBB puedes seleccionar el nombre que quieres que tenga el cookie de la sesión. Entonces todo lo que tienes que hacer es levantar el cookie para tener el ID de la sesión.

Ya que tengas el ID, entonces te conectas al database. Dentro del DB, el programa del foro crea una tabla que se llama: phpbb_sessions.

Dentro de esta tabla tienes los siguientes campos:

Código:
   session_id  char(32)
   session_user_id  mediumint(8)
   session_start  int(11)             
   session_time  int(11)
   session_ip  char(8)
   session_page  int(11)
   session_logged_in  tinyint(1)
   session_admin  tinyint(2)


Todo lo que tienes que hacer es agarrar el registro en donde el campo session_id sea el mismo que el que tienes del cookie. Y listo, ya tienes todos los datos de la sesión.

Es realmente sencillo, y aquí te dejo un poco de documentación que te va a servir para implementar esto:

Aprendiendo a usar cookies
http://perlenespanol.baboonsoftware.com/archives-tut/000047.html

Como conectarte a tu database
http://perlenespanol.baboonsoftware.com/archives-tut/000045.html


SALUDOS
Mensaje Dom Ago 21, 2005 5:24 am
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Responder citando

Lo intentaré. Pero me suena haber visto el otro día que en la tabla de sessions solo estaba la última visita y el SID.

Por cierto, el phpBB de este web utiliza SID por GET cuando "fallan" las cookies. Esto viene predeterminado en phpBB, le instalaste un mod o que? Es que he visto foros phpBB que sólo funcionan con SID por GET. A mi me interesa que sea como el de aquí, cookie y si falla que lo haga con GET.

Por cierto, ¿la cookie no estará serializada/codificada? Lo digo para coger el SID de ahí.

Saludos
Mensaje Dom Ago 21, 2005 7:15 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

j0as escribió:
Lo intentaré. Pero me suena haber visto el otro día que en la tabla de sessions solo estaba la última visita y el SID.

Por cierto, el phpBB de este web utiliza SID por GET cuando "fallan" las cookies. Esto viene predeterminado en phpBB, le instalaste un mod o que? Es que he visto foros phpBB que sólo funcionan con SID por GET. A mi me interesa que sea como el de aquí, cookie y si falla que lo haga con GET.

Por cierto, ¿la cookie no estará serializada/codificada? Lo digo para coger el SID de ahí.

Saludos


Podría ser diferente, dependiendo la versión de tu foro, aunque te recomiendo que lo actualizes lo antes posible.

Ahora, en cuanto a lo de los cookies, debes de poder configurar todo esto desde el Panel de Administración.


SALUDOS
Mensaje Dom Ago 21, 2005 3:08 pm
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Responder citando

Muchas gracias, me estás siendo de mucha ayuda.

¿Una vez tenga la sesión ID y la cookie y sepa relacionarla puedo usar el CGI::Session o Apache::Session? ¿O voy a tener que hacerme mi propio gestor de sesiones?

Saludos
Mensaje Dom Ago 21, 2005 7:38 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Si, ya que tengas el número de sesión puedes usar CGI::Session, y puedes usar el mismo cookie, así no importa donde hagan logout tus usuarios, lo harían tanto en el foro como en el sitio y viceversa.

Te recomiendo que leas los manuales de los módulos y empieces a hacer pruebas, vas a ver que los módulos te facilitan en gran manera el trabajo.


SALUDOS
Mensaje Lun Ago 22, 2005 4:53 am
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Responder citando

Pero CGI::Session imagino que no es capaz ni de leer la cookie, ni de leer la tabla de sesiones correctamente, ¿no es así? Tendría que leer la cookie manualmente e indicarle cual es el SID y hacer lo mismo con las tablas sessions, ¿no?

Saludos
Mensaje Lun Ago 22, 2005 9:34 am
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

j0as escribió:
Pero CGI::Session imagino que no es capaz ni de leer la cookie, ni de leer la tabla de sesiones correctamente, ¿no es así? Tendría que leer la cookie manualmente e indicarle cual es el SID y hacer lo mismo con las tablas sessions, ¿no?


De hecho usando el CGI::Session puedes levantar la sesión desde el cookie:

Código:

my $sid = $cgi->cookie("[NOMBRE COOKIE]") || undef;


Todo lo que tienes que hacer es remplazar [NOMBRE COOKIE] por el nombre del cookie que estás creando y listo, la variable $sid contendra el número de sesión.

Con eso ya puedes accesar al database, por ejemplo en MySQL:

Código:

my $dbh = DBI->connect("DBI:mysql:host=[HOST];database=[DB]", [username], [pass]);

my $sth = $dbh->prepare('SELECT * FROM phpbb_sessions WHERE session_id=?');
      $sth->execute($sid);
my $sesion = $sth->fetchrow_hashref();

print $$sesion{'session_user_id'} . "\n";   #imprime el ID del usuario


Realmente es sencillo, usando los módulos correctos.


SALUDOS
Mensaje Lun Ago 22, 2005 11:33 am
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Responder citando

Muchas gracias, estos días estaré liado así que, en 15 días lo pruebo.

Saludos
Mensaje Lun Ago 22, 2005 1:32 pm
j0as
Perlero Nuevo
Perlero Nuevo
Registrado: 18 Ago 2005
Mensajes: 12
Responder citando

Finalmente lo he probado y funciona

Un saludo
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group