• Publicidad

Ayuda CGI::SESSION

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Ayuda CGI::SESSION

Notapor fcardenas79 » 2006-04-04 11:19 @513

Gente, necesito una ayuda urgente, es sobre manejo de sessiones, ya esta instalado el CGI::SESSION, por favor, es urgente sus apoyos.

En esta Pagina1.cgi, trato de guardar el $user a una session. Diganme, ¿es necesario usar Cookies? ... bueno, solo necesito que se guarde ese dato en session, nada más. Luego en la pagina2.cgi quiero recuperar ese valor guardado en session, pero no me sale el valor. Diganme en que estoy fallando o cual es la mejor manera de solucionar este problema, por favor, necesito ese apoyo urgente, agradeceria mucho su ayuda ....
Saludos
Fausto C.

Pagina1.cgi
Código: Seleccionar todo
#!/usr/bin/perl
use CGI qw(:standard);
$cgi = new CGI;

use CGI::Session;

$path_session = "/home/user/";
$user = "Fausto Cardenas";

my $cookie = "";

$session = new CGI::Session("driver:File",undef,{'Directory'=>"$path_session"});

if ($q->cookie('CGISESSID')) {
$cookie = $cgi->cookie('CGISESSID');
$session->id($cookie);
}else{
$cookie = $cgi->cookie(-name=>'CGISESSID',-value=>$session->id());
}


unless ($session->param('fecha')){
$session->param(-name => 'fecha' , -value => scalar(gmtime()));
}


$session->param('login',"$user");
$session->expire('+1m');
$sid = $session->id();

$session->save_param($cgi, ["login"]);

print STDOUT "Content-type: text/html \n\n";
print STDOUT "Hola mundo cruel";
print STDOUT $user;
print STDOUT "<a href=session3.cgi?sid=$sid>pagina 2</a>";

pagina2.cgi Aqui no sale la session....
Código: Seleccionar todo
#!/usr/bin/perl
use CGI qw(:standard);
use CGI::Session;
$path_session = "/home/user/";

$form = new CGI;
$scookie = $form->param('sid');

#CGI::Session->name($scookie);
CGI::Session->name('sid');
$session = new CGI::Session("driver:File",$scookie,{'Directory'=>"$path_session"}) or die "$!";
$login = $session->param('login');


#CGI::Session->name($id);

#$sid = $cgi->cookie("CGISESSID") || undef;
#$session = new CGI::Session(undef, $sid, {Directory=>'/tmp'});


print STDOUT "Content-type: text/html \n\n";
print STDOUT "Hola mundo cruel";
print STDOUT $login;
fcardenas79
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2006-04-04 11:12 @508

Publicidad

Re: Ayuda CGI::SESSION

Notapor explorer » 2006-04-04 11:32 @522

¿El cgi tiene permiso de escritura en /home/user/??? Para conseguirlo, el cgi debe tener como propietario user y poder ser ejecutado por el usuario que ejecuta el servidor web.
Si ejecutas el Programa1 ¿Aparece algún fichero de sesión en el directorio /home/user?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor fcardenas79 » 2006-04-04 11:47 @532

explorer escribiste:¿El cgi tiene permiso de escritura en /home/user/??? Para conseguirlo, el cgi debe tener como propietario user y poder ser ejecutado por el usuario que ejecuta el servidor web.
Si ejecutas el Programa1 ¿Aparece algún fichero de sesión en el directorio /home/user?

Hola explorer :D
Bueno, no puedo entrar al nivel de ese home/user por la restriccion del FTP...
bueno, en si estoy haciendo una pequeña prueba de guardar solo una variable a SESSION y he probado varios metodos y no funciona, no se como puedo realizar una SESSION de la manera mas simple, me es recontra urgente.. que me puedes recomendar y si hay algun ejemplo o si mi codigo esta mal.
en mi primera pagina cuando ejecuto, todo me sale ok, sin errores y me sale el nombre que lo guarde dentro de
$session->save_param($cgi, ["login"]);
pero en la siguiente pagina no sale nada.. no se como hacer el get de la session.

Por favor help me.. me es necesario este codigo sino me matan :(
fcardenas79
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2006-04-04 11:12 @508

Re: Ayuda CGI::SESSION

Notapor explorer » 2006-04-04 11:56 @539

Por de pronto, repasa el tutorial, que se publicó ayer la última versión, mientras miro alguna cosilla...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda CGI::SESSION

Notapor explorer » 2006-04-04 12:03 @543

Veo en http://search.cpan.org/~markstos/CGI-Se ... er/file.pm que a la hora de almacenar las sessiones usando el driver file, este lo hace en ficheros de la forma cgisess_%s, siendo %s el ID de la sesión. Bueno, pues primero tienes que comprobar que Programa1 crea efectivamente esos ficheros. Y segundo, el Programa2 debe conocer el ID de session del primero para poder acceder a esos datos. Seguramente te falta hacer un load_param() después, pero ahí ya no estoy seguro...
Sigo mirando...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda CGI::SESSION

Notapor explorer » 2006-04-04 16:22 @724

Esto es un ejemplo funcional, pero es mucho mejor seguir el tutorial.
Programa1.cgi:
Código: Seleccionar todo
#!/usr/bin/perl

use CGI;
use CGI::Session;

my $cgi = new CGI;
my $session = new CGI::Session("driver:File",undef,{'Directory'=>'/tmp/'});

my $login = $cgi->param('login');
$session->save_param();

print $session->header;
print $cgi->start_html('Test'),
      "Hola mundo cruel $login",$cgi->br;
printf ("<a href=\"Programa2.cgi?%s=%s\">click me</a>", $session->name, $session->id);
print $cgi->end_html;
Programa2.cgi:
Código: Seleccionar todo
#!/usr/bin/perl

use CGI;
use CGI::Session;

my $cgi = new CGI;

# Recuperar la sesión
$CGISESSID = $cgi->param('CGISESSID');

my $session = new CGI::Session("driver:File", $CGISESSID, {'Directory'=>'/tmp/'});
my $login = $session->param('login');

print $cgi->header;
print $cgi->start_html('Test'),
      "Hola de nuevo $login",$cgi->br;
print $cgi->end_html;

$session->delete();
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Ayuda CGI::SESSION

Notapor marcmb » 2010-05-10 11:47 @533

Me he estado mirando el tutorial porque esto que decías aquí no me funcionaba y he conseguido que me funcione. He hecho un módulo para escribir las "galletas" y para leerlas, como estaba usando el mismo cgi para ambas cosas he hecho lo siguiente:

Código en el cgi:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $user = 'pepito1900';
  2. my $id = escribirG($user);
  3. leerG($id);
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Funciones del módulo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. sub escribirG
  2. {
  3.         my $session = new CGI::Session("driver:File",undef,{'Directory'=>'/tmp/'});
  4.         $session->param(-name=>'usuario',
  5.                         -value=>shift,#Usuario que le pasamos del cgi
  6.                         -expire=>'+1m'
  7.                         );
  8.         $session->save_param();
  9.         return $session->id();
  10. }
  11. sub leerG
  12. {
  13.         my $session = new CGI::Session("driver:File", shift, {'Directory'=>'/tmp/'});
  14.         my $usuario = $session->param('usuario');
  15.         print '<br>Usuario: ',$usuario;
  16.         $session->delete();#Borramos la "galleta"
  17.         $session->flush(); #Recomendado en el manual
  18. }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Cuando ejecutamos my $id = escribirG($usuario); crea la galleta en el directorio /tmp y retorna el "nombre" que le da a la galleta y lo almacena en $id; luego, al ejecutar la siguiente línea de código leerG($id); le pasamos el nombre de la galleta para que pueda leer esa en concreto. Y así me ha funcionado, usando la manera que decías no encontraba nunca la galleta y encima creaba otra nueva y no la borraba, por lo que al mirar en /tmp he quedado asustado de la cantidad de galletas que había almacenadas, y ahora de esta manera al leer la galleta en cuestión la borramos luego. He usado flush() porque así lo recomiendan en el manual, aunque no creo que sea totalmente necesario, ya que con delete() ya las borraba bien.

Supongo que ha de haber otra manera de hacerlo más "limpia" pero de momento ésta es la única que me ha funcionado después de romperme el coco toda la tarde, y por cierto, explorer, han cambiado la url del tutorial, ahora es: http://search.cpan.org/~markstos/CGI-Se ... utorial.pm

Y explorer, ¡muchas gracias por tu ayuda!
Última edición por explorer el 2010-05-10 14:07 @630, editado 1 vez en total
Razón: Ortografía, anglicismos, abreviaturas telefónicas
Avatar de Usuario
marcmb
Perlero nuevo
Perlero nuevo
 
Mensajes: 55
Registrado: 2010-05-03 07:42 @362
Ubicación: Girona


Volver a Intermedio

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados