[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