Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Sesiones

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto
Mensaje Dom May 29, 2005 10:05 am
diego_el_38
Perlero Nuevo
Perlero Nuevo
Registrado: 29 May 2005
Mensajes: 11
Sesiones Responder citando

hola... me gustaria saber si en perl, al igual que en php, se pueden crear sesiones, o sea hacer un par de paginas que un usuario pueda recorrer una vez que accedio correctamente con su nombre de usuario y contraseña a la pagina principal...
desde ya muchas gracias
saludos
diego
Mensaje Dom May 29, 2005 2:47 pm
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

claro que se puede, yo uso una cookie en el cliente con el ID de la sesion y esa sesion la tengo en una base de datos temporal en donde está el nombre de usuairo y datos así que uso para la sesion...

Saludos
Mensaje Dom May 29, 2005 3:01 pm
diego_el_38
Perlero Nuevo
Perlero Nuevo
Registrado: 29 May 2005
Mensajes: 11
Responder citando

hola monoswim... gracias por responde... pero me puedes decir como creas la sesion, y como tomas los valores de la cookie para ir activando las diferentes paginas en donde puede entrar el usuario...
desde ya muchas gracias
saludos
diego
Mensaje Dom May 29, 2005 3:07 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Aquí en el sitio hay un tutorial que hizo Monoswim que justamente muestra como crear, modificar y eliminar cookies con perl:
http://perlenespanol.baboonsoftware.com/archives-tut/000047.html


SALUDOS
Mensaje Dom May 29, 2005 4:10 pm
diego_el_38
Perlero Nuevo
Perlero Nuevo
Registrado: 29 May 2005
Mensajes: 11
sesion - login - metodo post Responder citando

hola kidd... gracias por contesta, he leido el tuto pero no encontre una verdadera respuesta a lo q necesito, quizas me haya equivocado en el termino "sesiones", es por ello q voy a tratar de explicarme mejor en lo q quiero y quizas me puedan orientar un poco mas... yo tengo un formulario donde el usuario ingre su username y su password, este hace coneccion con un archivo perl, el cual verifica la existencia del usuario y si es correcto arma una pagina web... hasta ahi bien, ahora esta pagina web q crea tiene a su vez hipervinculos a otras paginas webs, lo que yo quiero es q las demas paginas webs nada mas se pueden ver por el usuario registrado, o sea yo supuse q de la primer pagina creado tendria q pasar nuevamente el username y la password a cada link para que esos links no tengan acceso desde otra web... al mismo tiempo me surge otro problema, yo por ejemplo en la primer pagina perl creada tenia un link con el siguiente codigo:
Cita:
<a href=http://www.pagina.com.ar/otroperl?username=var1&password=var2>link</a>
esto es claramente metodo get, pero me resulta muy inseguro, asiq quisiera saber si hay alguna forma de pasar las variables por metodo post utilizando ese link...
desde ya muchas gracias
saludos
diego
Mensaje Dom May 29, 2005 7:38 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Para no estar pasando el nombre de usuario y la contraseña de esa manera lo que puedes hacer es lo siguiente:

1. Preguntas el username y contraseña.

2. Si son correctas creas un número único el cual va a ser la sesión del usuario. Entonces podrías guardar ya sea un database o en un archivo de texto la sesión, la hora en que fue creada y el username.

3. De esta manera en tus links todo lo que tienes que hacer es mandar el ID de la sesión:
Código:
<a href=http://www.pagina.com.ar/otroperl?id=137463>link</a>


4. Cada página checa si la sesión es válida, verificando con el database.

5. Checa cada minuto las sesiones y expira aquellas que tengan un x tiempo de ser creadas.


De ésta manera podrías crear un sistema bastante sencillo y algo seguro para controlar el acceso de tus usuarios.

También te recomiendo que cheques los siguiente módulos que automatizan el proceso más o menos similar al que te comento:
http://search.cpan.org/~jbaker/Apache-Session-1.6/Session.pm
http://www.ruby-doc.org/core/classes/CGI/Session.html

Y el siguiente artículo te puede ayudar:
http://ironbark.bendigo.latrobe.edu.au/subjects/WE/lectures/w10.d/Lect20.html


SALUDOS
Mensaje Dom May 29, 2005 7:50 pm
diego_el_38
Perlero Nuevo
Perlero Nuevo
Registrado: 29 May 2005
Mensajes: 11
Responder citando

hola kidd... muchas gracias, la verdad q algo asi no se me habia ocurrido... te hago una preguntita mas, cuando pusiste
Cita:
o en un archivo de texto la sesión, la hora en que fue creada y el username.
, te referis a una cookie, no??... bueno, me voy a tener q poner a leer mucho para lograr optimizar esto y encontrarle la vuelta...
nuevmente gracias por encaminarme
saludos
diego
Mensaje Dom May 29, 2005 9:15 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Si vas a pasar la sesión por las ligas no tienes la necesidad de un cookie:
Código:
<a href=http://www.pagina.com.ar/otroperl?id=137463>link</a>


A lo que me referia con el archivo. Digamos que el usuario pone bien su nombre de usuario y contraseña, entonces le asignas un número de id, tiempo de creación, y los datos del usuario y lo guardas en un archivo al cual le vamos a llamar sesiones.txt:

Código:

#!/usr/bin/perl -w

use strict;
use CGI;

#Recibimos los datos de la forma
my $query = new CGI;
my %Input = $query->Vars;


#La verificación que harías de username y contraseña
if($Input{'usuario'} eq "" && $Input{'pwd'} eq ""){

    my $id_sesion = "ses" . (time() + int(rand(100)));
    my $tiempo_sesion = time();

      #Abrimos el archivo de sesiones
      open(FILE,">>sesiones.txt");
       print FILE join ":", $id_sesion, $tiempo_sesion, $Input{'usuario'};
       print FILE "\n";
      close(FILE);

}


Así ya se pone una nueva entrada al archivo sesiones.txt que se vería algo así:

Código:
ses1117422682:1117422620:prueba


El primer elemento es el número de sesión, el segundo es la hora en que fue creada, y el último el nombre del usuario.

Entonces en cada uno de tus scripts puedes verificar las sesiones haciendo algo así:

Código:

#!/usr/bin/perl -w

use strict;
use CGI;

#Recibimos los datos de la forma
my $query = new CGI;
my %Input = $query->Vars;


#Si es que tenemos sesion
if($Input{'id'}){

   open(FILE,"sesiones.txt");
     my @sesion = grep{ /^$Input{'id'}/ } <FILE>;
   close(FILE);

  if(defined($sesion[0])){
     my @datos = split(/\:/, $sesion[0]);
       print "Hola $datos[2]\n";
       print "Tu número de sesión es $datos[0]\n";
  }else{
      #pedir contraseña
  }


}else{
   #pedir username y contraseña
}



El código es solamente un bosquejo de como podría funcionar, debes de mejorarlo y modificarlo según tus necesidades. De hecho no lo he probado, en mi mente funciona, y debe de funcionar Wink

Pero más o menos te puede dar una idea de lo que podría hacer.

SALUDOS
Mensaje Lun May 30, 2005 12:46 pm
diego_el_38
Perlero Nuevo
Perlero Nuevo
Registrado: 29 May 2005
Mensajes: 11
Responder citando

hola kidd... creo q ya me estoy empezando a poner molesto, no?? jejeje Embarassed ... ya entendi lo que hiciste y estoy armandolo todo de a poco para no olvidarme de nada, te digo que estoy totalmente agradecido por la ayuda q me estas brindando... te hago una consulta, me podes explicar como se cuenta la hora, ya que para mayor seguridad, por ejemplo si el valor de la hora es 1117422620 le pondria un if evaluando un valor mayor a ese q corresponda a pasada la media hora, por eso me gustaria saber q numero le tendria q sumar a ese valor para tener el valor de la media hora pasadas...
saludos
diego
Mensaje Lun May 30, 2005 6:13 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Alguno de los siguientes módulos te pude ayudar, checa con cual te acomodas más:

http://search.cpan.org/~gozer/POSIX-strptime-0.05/lib/POSIX/strptime.pm
http://search.cpan.org/~roode/Time-Format-1.00/Format.pm
http://search.cpan.org/~stevan/Date-Formatter-0.07/lib/Date/Formatter.pm
http://search.cpan.org/~miko/Date-EzDate-1.08/EzDate.pm
http://search.cpan.org/~stbey/Date-Pcalc-1.2/Pcalc.pm
http://search.cpan.org/~rse/lcwa-1.0.0/lib/lwp/lib/HTTP/Date.pm


Por ejemplo con el primer módulo, el POSIX. Puedes hacer algo así:

Código:

#!/usr/bin/perl -w

use strict;

use POSIX qw[strftime];

my $date = strftime('%Y-%m-%d %H:%M:%S', localtime(time + 60 * 30));

print "$date\n";


Lo que va hacer este código es imprimirte la fecha y hora con 30 minutos de adelanto.

Ya dejo a tu criterio que veas como puedes acomodar esto a tu script.


SALUDOS
Mensaje Vie Jun 10, 2005 2:26 pm
eiial
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2003
Mensajes: 48
Responder citando

ja hace no mucho tiempo le envie a uriel un modulo completo de sesiones, que emulaba exactamente a PHP solo cargabas el modulo y lo usabas como una variable, mm lamentablemente se lo envie pensando que no habia otro ba' por lo menos cuando yo lo hice no habia ninguno así pero es muy parecido a en su manejo interno a http://search.cpan.org/~jbaker/Apache-Session-1.6/Session.pm Sad , igualmente es más fácil de usar ya que se importa y se inicia con session_start(); automaticamente crea una variable de entorno llamada %SES donde se cargan los datos y estos se reflejan automaticamente en un archivo o entrada sql.

Bueno espero verlo publicado por ahi ya que las sesiones son muy utiles en temas de seguridad, pero un consejo con respecto a los comentarios anterires, si creas un id que este no sea consecutivo sino que sea randomizado.

Les mando un saludo a todos y lo felicito a uriel muy buena pagina.

Saludos
Mensaje Vie Jun 10, 2005 2:35 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola eiial:

Ahí tengo el módulo, estamos ahorita preparando todo para poner la nueva sección de "Módulos" en el sitio, donde el tuyo será de los primeros Wink


SALUDOS
Mensaje Vie Jun 10, 2005 2:42 pm
eiial
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2003
Mensajes: 48
Responder citando

Dale, si necesitan algo me avisas a mi mail.

Un Abrazo y éxitos
Mensaje Vie Jun 10, 2005 3:38 pm
Perl user
Maestro Honorario
Maestro Honorario
Registrado: 03 Nov 2004
Mensajes: 385
Responder citando

Si quieres sesiones persistentes sin necesidad de mod_perl, recomiendo CGI::Session ( en cualquiera de sus sabores ), para mod_perl definitivamente Apache::Session está bien ( a mi me gusta Apache::Session::Postgres ).

Saludos,
Publicar nuevo tema   Responder al tema    Foros de discusión -> Experto Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group