Using perl Syntax Highlighting
- #!/usr/bin/perl
- binmode STDOUT, ":encoding(UTF-8)";
- use lib '../Modulos/';
- #use strict;
- #use warnings;
- #use diagnostics;
- use login;
- use CGI::Session;
- use CGI ':standard';
- use CGI::Carp qw'fatalsToBrowser warningsToBrowser';
- print error;
- my $cgi = CGI->new();
- $cgi->charset('UTF-8');
- my $session = CGI::Session->new("driver:File", $cgi, {'Directory'=>'/tmp/'})
- or die CGI::Session->errstr;
- $session->expire('+10s'); ##Tiempo que vence la sesión
- ## Enviamos la cookie de sesión al usuario
- print $session->header;
- print "<META HTTP-EQUIV='CACHE-CONTROL' CONTENT='NO-CACHE,NO-STORE,PRIVATE'>";
- print "<META HTTP-EQUIV='PRAGMA' CONTENT='NO-CACHE'>";
- # Aquí guardaremos el perfil del usuario
- my $perfil;
- if ( not $session->param('~registrado') ) { # si el usuario no está registrado
- # vemos si se está registrando en este momento
- if (my $nombre = $cgi->param('login_nombre')) {
- my $passwd = $cgi->param('login_passwd');
- # Vemos si es un usuario conocido por nosotros
- # si lo es, obtenemos su perfil
- if ($perfil = login->verificar($nombre, $passwd)) {
- # Guardamos el perfil asociado a la sesión
- $session->param('perfil', $perfil);
- $session->param('~registrado', 1);
- $session->expire('~registrado', '+10s');
- }
- else { # Es un desconocido, le pedimos que rellene el registro otra vez
- presenta_login('Usuario o contraseña incorrecta');
- exit;
- }
- }
- else { # No está registrado ni se está registrando
- presenta_login('Identifíquese');
- exit;
- }
- }
- else { # es un usuario registrado (hay una sesión de él)
- # recuperamos el perfil, desde la sesión
- $perfil = $session->param('perfil');
- }
- # A partir de aquí, sabemos qué usuario es, y su perfil
- # Podemos presentarle las opciones propias de un usuario registrado
- my $nombre = $perfil->{nombre};
- my $nom_usuario = $perfil->{login};
- if ($cgi->param('Desconectar')) { # caso de que el usuario quiera desconectarse
- $session->clear(['~registrado']); # olvidamos que estaba registrado
- $session->flush();
- CGI::Session->find('driver:file', sub {}, {Directory => '/tmp/'} );
- print p("<META HTTP-EQUIV=\"Refresh\" CONTENT=\"1;URL=info.pl\" target=\"_SELF\"/>");
- }
- else { # una página normal
- #$session->header('-cache-control' => 'NO-CACHE');
- print
- start_html({-tittle=>'Bienvenido',-style=>'../../Css/style_formulario.css'}),
- p(div({-id=>"Titulob"},"Bienvenido $nombre ($nom_usuario)")),
- p(a({-href=>"formulario_contacto.pl", -TARGET=>"info"},div({-id=>"menu2"},'Agregar Contacto')),
- a({-href=>"modf.pl", -TARGET=>"info"},div({-id=>"menu2"},'Modificar Contacto')),
- a({-href=>"formulario_institucion.pl", -TARGET=>"info"},div({-id=>"menu2"},'Agregar Institución')),
- a({-href=>"formulario_sede.pl", -TARGET=>"info"},div({-id=>"menu2"},'Agregar Sede')),
- a({-href=>"formulario_usuario.pl", -TARGET=>"info"},div({-id=>"menu2"},'Agregar Usuario')),
- a({-href=>"eliminar_usuario.pl", -TARGET=>"info"},div({-id=>"menu2"},'Eliminar Usuario')),
- a({-href=>$cgi->url() . '?Desconectar=1', -onClick=>''},div({-id=>"menu2"},'Salir'))),
- end_html()
- ;
- }
- sub presenta_login {
- my $titulo = shift;
- my $javas=<<EOC
- function CambiaColor(){
- if ("$titulo" == "Usuario o contraseña incorrecta"){
- document.getElementById('subt').style.color = "red";
- }
- }
- EOC
- ;
- print
- start_html({-tittle=>'Login',-style=>'../../Css/login.css', -script=>$javas, onLoad=>'CambiaColor()'}),
- div({-id=>"cuadro"},div({-id=>"titulo"},'Registro de entrada'),
- div({-id=>"subt"},$titulo),
- start_form(),
- div({-id=>'nombre'},'Nombre: ' . textfield('login_nombre')),
- div({-id=>'pass'},'Contraseña: ' . password_field('login_passwd')),
- p(),
- submit('Entrar')),
- end_form,
- end_html()
- ;
- }
Coloreado en 0.008 segundos, usando GeSHi 1.0.8.4
Por cierto este código es tomado del amigo explorer (y con algunas modificaciones) que escribió en otro mensaje (gracias).
El problema es que cuando presiono el enlace de "salir" ejecuta el $session->clear pero vuelve a crear la sesión inmediatamente y después redirecciona. Por favor, no entiendo el porqué crea la sesión de nuevo.
Gracias por adelantado de la ayuda que me puedan dar.