[caracas-pm] Problema

Jose Rey jrey at linuxsis.net
Thu Oct 27 16:31:09 PDT 2005


Por seguridad CGI::FormBuilder elimina todos los parámetros que no esten 
declarados como "fields" en el formulario, seguramente estás perdiendo 
la variable _sessionid.

2 Soluciones:

1.- Utiliza la opción keepextras para conservar _sessionid 
específicamente, o utiliza simplemente:
    keepextras => 1
para mantener todas las variables que necesites, particularmente el 
parámetro "rm".

2.- CGI::FormBuilder, puede mantener una sessión de Apache::Session, asi 
que probablemente esta eliminando el parámetro _sessionid, prueba 
obtener la sesión con:
   $id = $form->sessionid
en vez de intentar obtenr el campo _sessionid.


Saludos
   Jose Luis Rey


Manuel Telleria wrote:

> Estimados todos,
>
> Tengo el siguiente problema,
>
> Estoy usando CGI::FormBuilder y Apache::Session::Postgres.
>
> El programa comienza con el runmode = "comienzo" que es el run mode 
> por omision, lo primero que se ejecuta en este run mode, es la función 
> IniciaSesion, la cual me genera una sesión con el módulo 
> Apache::Sesion::Postgres, ahora bien cuando ejecuto el programa con el 
> bloque de codigo comentado (ver programa)) todo esta bien en cuanto a 
> la generación de la sesion es decir me retorna el Dumper(%my_session) 
> y verifico que esta sesión existe en la base de datos "sessions", me 
> explico, si hago un select sobre la tabla donde Apache guarda las 
> sesiones existe y la puedo ver. El problema esta cuando descomento el 
> bloque de código al que me refiero, que no es mas que el llamado al 
> new del CGI::FormBuilder.
>
> Al hacer la ejecución del programa con el bloque de código 
> descomentado a pesar de que me muestra un arreglo de sesión con el 
> Dumper, cuando trato de verificar la existencia de esta sesión en la 
> base de datos "sessions" esta no existe, la verdad es que no logro 
> entender que sucede , que tiene que ver el llamado a CGI::FormBuilder 
> sobre la generación de la sesión si se supone que la generó ya que el 
> arreglo %my_session tiene valores.
>
> Otro dato cuando reviso el archivo error.log de apache no encuentro 
> ningun error que haga referencia a problemas con la conexion o con el 
> insert en la tabla de sessions.
>
> Datos tecnicos
>   SO Debian sarge
>   Apache2 con modperl2
>   todos los módulos fueron instalados con apt-get install
>
>
> A continuación el código. Y Gracias de antemano al que pueda ayudarme.
>
> manuel.pl
> ===================================
> #!/usr/bin/perl -w -I ./ctrl
>
> use CGI::Carp qw(fatalsToBrowser);
> use manuel;
> use CGI '-debug';
> my $q = new CGI;
> my $obj = manuel->new (
>                                           TMPL_PATH => 
> '/cgi-bin/inicio_sesion/tmpl/',
>                                           PARAMS => {
>                                                                   
> titulo => "Inicio de Sesion",
>                                                                   
> accion => "manuel.pl"
>                                                                } );
> $obj->run;
>
> manuel.pm <http://manuel.pm>
> ===================================
> #! /usr/bin/perl -w -I .
> BEGIN {unshift @INC, "/usr/lib/cgi-bin/model/"; };
>
> package manuel;
>
> use strict;
> use warnings;
> use base 'CGI::Application';
> use CGI::FormBuilder;
> use Data::Dumper;
> use CGI::Cookie;
> use Error;
> use Apache::Session::Postgres;
> my %my_session;
> my $sMensaje = '';
>
> ############################################################################ 
> ###
> # Función setup : esta función es la que controla el flujo del 
> programa, depen-
> # diendo del rm (run mode).
> ############################################################################ 
> ###
>
> sub setup {
>    my $self = shift;
>    $self->start_mode('comienzo');
>    $self->run_modes(
>                                  comienzo => 'comienzo',
>                                 );
>    $self->mode_param('rm');
> }
>
> ############################################################################ 
> ###
> # Función comienzo : esta función es la que da inicio al programa. Es 
> la que se
> # ejecuta en caso de que no se haya escogido ningun rm (run mode).
> ############################################################################ 
> ###
> sub comienzo {
>    my $self = shift;
>    my $q = $self->query;
>
>    &IniciaSesion($self);
>
> ****BLOQUE QUE SE COMENTA PARA QUE FUNCIONE
>
> # my $form = CGI::FormBuilder->new( method => 'post',
> #                                                             name => 
> 'myforma',
> #                                                             sticky => 0,
> #                                                             enctype 
> => 'multipart/form-data',
> #                                                             
> selectnum => 1,
> #                                                             fields 
> => [qw/scorreo scontrasena serrortxt SubmitBtn nintentos/],
> #                                                             validate 
> => { scorreo => 'EMAIL',
> # 
>                                                                                    
> scontrasena => 'VALUE',
> #                                                                                 
> },
> #                                                             messages 
> => '/usr/lib/cgi-bin/lib/mensajes.es',
> #                                                             template 
> => '/usr/lib/cgi-bin/tmpl/sesion.tmpl',
> #  );
>
> *******FIN BLOQUE
>
>
>    return Dumper(%my_session); ----Linea que retorna el arreglo de la 
> sesion solo para debuger.
>
>    programa continua ....
>
>    return $form->render;
>
> }
>
> ############################################################################ 
> ###
> # Función cIniciaSesion :
> ############################################################################ 
> ###
> sub IniciaSesion{
>    my $self = shift;
>    my $q = $self->query();
>    my $dsn = "dbi:Pg:dbname='sessions';host='postgres.desarrollo'";
>
>   my $id = ($q->param('_sessionid')) ? $q->param('_sessionid') : 0;
>
>    eval{
>          tie %my_session, 'Apache::Session::Postgres', $id, 
> {DataSource => $dsn,
>                                                                                             
> UserName => 'usuario',
>                                                                                             
> Password => '123456',
>                                                                                            
> Commit => 1 };
>    };
>
>    if ($@){
>      $sMensaje = Error::getError(10);
>    }
> }
>
> 1;
>
>------------------------------------------------------------------------
>
>_______________________________________________
>caracas-pm mailing list
>caracas-pm at pm.org
>http://mail.pm.org/mailman/listinfo/caracas-pm
>



More information about the caracas-pm mailing list