• Publicidad

Problema al cerrar sesión (CGI::Session)

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

Re: Problema al cerrar sesión (CGI::Session)

Notapor thegame » 2012-11-29 09:08 @422

explorer: ¿en qué página ves el manual del CGI :?: ? porque yo la estoy viendo desde http://perldoc.perl.org/ y no me aparece lo de los pragmas. Mira el pantallazo que te adjunto:
Adjuntos
screenshot1.png
screenshot1.png (86.81 KiB) Visto 2148 veces
thegame
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2011-11-08 11:19 @513
Ubicación: Venezuela

Publicidad

Re: Problema al cerrar sesión (CGI::Session)

Notapor explorer » 2012-11-29 11:18 @512

La página de manual del CGI la tienes en
  • su página oficial en CPAN: CGI
  • como es un módulo 'principal', viene incluido en cada distribución de Perl, así que viene en la documentación de la misma, por eso aparece en la web de perldoc.perl.org
  • como yo uso un sistema Linux, esa misma página de manual está accesible como página de manual (valga la redundancia): man CGI
  • teniendo instalado perldoc, pues también se puede sacar desde la línea de comandos: perldoc CGI
Lo de los pragmas está un poco más abajo de donde estás mirando. Busca por la frase 'how to create an HTTP-EQUIV'.
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: Problema al cerrar sesión (CGI::Session)

Notapor thegame » 2012-11-29 11:31 @521

¡Ajá! Vi un detalle aplicando el no-cache... Coloqué el no-cache en el formulario de entrada y ya luego de autenticado... Con el no-cache, al entrar en la parte de usuarios autenticados no puedo darle atrás para regresar al formulario pero si le doy al enlace 'formulario institución' sí puedo regresar atrás :(

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use diagnostics;
  5. use lib '../Modulos/';
  6.  
  7. use login;
  8. use CGI           qw':standard';
  9. use CGI::Session;
  10. use CGI::Carp     qw'fatalsToBrowser warningsToBrowser';
  11.  
  12. my $tiempo_sesion = '+1d';              # Tiempo que dura la sesión (máximo)
  13. my $tiempo_login  = '+10s';             # Tiempo que dura la sesión (identificado)
  14.  
  15.  
  16. my $cgi = CGI->new;                     # creamos el objeto CGI
  17.  
  18. my $session                             # creamos el objeto CGI::Session
  19.     = CGI::Session->new('driver:file', $cgi, {Directory => '/tmp/'});
  20.  
  21. if ($session->is_new) {                 # ¿es una nueva sesión?
  22.     $session->expire($tiempo_sesion);   # Tiempo de expiración de la sesión (todo el día)
  23.  
  24.     print                               # Presentamos la página de registro
  25.         $session->header,
  26.         $cgi->start_html(-tittle=>'Bienvenido',-style=>'../../Css/style_formulario.css', -head=>[meta({-http_equiv=>'Cache-Control', -content=>'no-cache,no-store,private',}),meta({-http_equiv=>'Pragma', -content=>'no-cache',}),],),
  27.         cabeceras_http(),
  28.         $cgi->p("Identifiquese:"),
  29.         formulario(),
  30.         $cgi->end_html,
  31.         ;
  32.  
  33.     terminar();
  34. }
  35.  
  36. my $usuario = $cgi->param('login_nombre') || '';        # Vemos si se está registrando
  37. my $passwd  = $cgi->param('login_passwd') || '';
  38.  
  39. if ($usuario and $passwd and login->verificar($usuario, $passwd)) {
  40.     $session->param('~registrado', 1);          # Lo marcamos como registrado
  41.     $session->expire('~registrado', $tiempo_login);     # Tiempo que dura la sesión (login)
  42.  
  43.     $session->param('nombre', $usuario);                # Guardamos su nombre
  44. }
  45.  
  46. if (! $session->param('~registrado')) {                 # ¿Ha pasado el tiempo de sesión login?
  47.  
  48.     my $usuario = $session->param('nombre') || '';      # Recuperamos su nombre
  49.     $usuario = ", $usuario" if $usuario;
  50.  
  51.     print
  52.         $cgi->header(),
  53.         $cgi->start_html(-tittle=>'Bienvenido',-style=>'../../Css/style_formulario.css', -head=>[meta({-http_equiv=>'Cache-Control', -content=>'no-cache,no-store,private',}),meta({-http_equiv=>'Pragma', -content=>'no-cache',}),],),
  54.         cabeceras_http(),
  55.         $cgi->p("Su sesion ha expirado$usuario. Identifiquese de nuevo:"),
  56.         formulario(),
  57.         $cgi->end_html,
  58.         ;
  59.  
  60.     terminar();
  61. }
  62.  
  63. # Llegamos aquí cuando el usuario está registrado e identificado
  64. print                                                   # presentamos una página normal
  65.     $session->header,
  66.     $cgi->start_html(-tittle=>'Bienvenido',-style=>'../../Css/style_formulario.css', -head=>[meta({-http_equiv=>'Cache-Control', -content=>'no-cache,no-store,private',}),meta({-http_equiv=>'Pragma', -content=>'no-cache',}),],),
  67.     cabeceras_http(),
  68.     $cgi->p('Gracias por su visita, ' . $session->param('nombre'). ". Dispone de $tiempo_login mas."),
  69.     $cgi->a({-href=>"formulario_institucion.pl", -Target=>"_self"},$cgi->div({-id=>"menu2"},'Agregar Institución')),
  70.     $cgi->end_html,
  71.     ;
  72.  
  73. ## Fin del programa
  74. terminar();
  75.  
  76. ### Subrutinas
  77. sub formulario {                        # presenta un formulario muy simple
  78.     return
  79.         $cgi->start_form,
  80.         'Nombre: ',
  81.         $cgi->textfield('login_nombre'), br,
  82.         'Passwd: ',
  83.         $cgi->password_field('login_passwd'), br,
  84.         $cgi->submit,
  85.         $cgi->end_form,
  86.         ;
  87. }
  88.  
  89. sub cabeceras_http {
  90.     return
  91.         $cgi->p(
  92.             join $cgi->br, map { "$_ : " . $cgi->http($_) } sort $cgi->http()
  93.         )
  94.         ;
  95. }
  96.  
  97. sub terminar {
  98.     $session->flush();
  99.     CGI::Session->find('driver:file', sub {}, {Directory => '/tmp/'} );            # Purgamos sesiones caducadas
  100.     exit(0);
  101. }
  102.  
Coloreado en 0.005 segundos, usando GeSHi 1.0.8.4
thegame
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2011-11-08 11:19 @513
Ubicación: Venezuela

Re: Problema al cerrar sesión (CGI::Session)

Notapor thegame » 2012-11-29 14:30 @646

Actualización:

Pruebas realizadas en Google Chrome-->> Funciona la autenticación completamente, es decir al dar atrás pide autenticarse nuevamente.

Pruebas en Firefox-->> al estar en la página principal y dar atrás (luego de salir del área de autenticación) regresar al área.

Pero estando en la misma situación mencionada anteriormente y presionamos F5 al dar atrás me pide autenticación para el área de autenticados.
thegame
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2011-11-08 11:19 @513
Ubicación: Venezuela

Re: Problema al cerrar sesión (CGI::Session)

Notapor explorer » 2012-11-29 23:42 @029

He encontrado un hilo donde se comenta este mismo problema, y uno de los que participa dice que no importa que una persona vuelva atrás y vea información que está cacheada: si intenta realizar cualquier operación, como su sesión ya ha caducado, nuestro cgi se dará cuenta de que no está autenticado, y le reenviará al formulario de registro de entrada.

Lo importante es que si el usuario ha pulsado la opción de desconexión, borremos el parámetro de sesión de que está autenticada, o expiramos su sesión, o limpiamos la sesión (con clear()), o borramos completamente la sesión (con delete()).

Otra cosa es si hacemos estos pasos, y el usuario da hacia atrás, y puede realizar operaciones como si siguiera conectado... entonces es que hemos hecho algo mal.
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: Problema al cerrar sesión (CGI::Session)

Notapor thegame » 2012-12-03 09:24 @433

Bueno ya resolví lo del cache, ya logré que no guardara en caché... Ahora para hacer un clear() o un delete() a la sesión (al salir del área autenticada), lo más conveniente sería hacerlo en la página principal (que es a donde iría luego de presionar salir, ¿no?)

Con hacer un load() en la página principal, debería traerme la sesión, ¿no? Sería algo así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. my $session = CGI::Session->load() or die CGI::Session->errstr;
  2. $session->flush();
  3. CGI::Session->find( 'driver:file', sub { }, { Directory => '/tmp/' } );    # Purgamos sesiones caducadas
  4. $session->delete();
  5.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
thegame
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2011-11-08 11:19 @513
Ubicación: Venezuela

Re: Problema al cerrar sesión (CGI::Session)

Notapor explorer » 2012-12-03 13:51 @619

Sí, pero... según el manual, debes comprobar que el load() ha funcionado... Debes comprobar si el load() ha conseguido identificar la sesión, o no.
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

Anterior

Volver a Módulos

¿Quién está conectado?

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