• Publicidad

Sesiones

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Sesiones

Notapor diego_el_38 » 2005-05-29 11:05 @503

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
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Publicidad

Notapor monoswim » 2005-05-29 15:47 @699

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
MonoSwim
Perl Programming Language
Avatar de Usuario
monoswim
Perlero nuevo
Perlero nuevo
 
Mensajes: 452
Registrado: 2003-11-18 16:13 @717
Ubicación: Buenos Aires

Notapor diego_el_38 » 2005-05-29 16:01 @709

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
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Notapor kidd » 2005-05-29 16:07 @713

Hola:

Aquí en el sitio hay un tutorial que hizo Monoswim que justamente muestra como crear, modificar y eliminar cookies con perl:

http://perlenespanol.com/archives-tut/000047.html


SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

sesion - login - metodo post

Notapor diego_el_38 » 2005-05-29 17:10 @757

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:
<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
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Notapor kidd » 2005-05-29 20:38 @901

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: Seleccionar todo
<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-S ... 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/ ... ect20.html


SALUDOS
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor diego_el_38 » 2005-05-29 20:50 @910

hola kidd... muchas gracias, la verdad q algo asi no se me habia ocurrido... te hago una preguntita mas, cuando pusiste
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
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Notapor kidd » 2005-05-29 22:15 @968

Hola:

Si vas a pasar la sesión por las ligas no tienes la necesidad de un cookie:
Código: Seleccionar todo
<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: Seleccionar todo
#!/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: Seleccionar todo
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: Seleccionar todo
#!/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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor diego_el_38 » 2005-05-30 13:46 @615

hola kidd... creo q ya me estoy empezando a poner molesto, no?? jejeje :oops: ... 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
diego_el_38
Perlero nuevo
Perlero nuevo
 
Mensajes: 11
Registrado: 2005-05-29 09:58 @457

Notapor kidd » 2005-05-30 19:13 @842

Hola:

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

http://search.cpan.org/~gozer/POSIX-str ... trptime.pm
http://search.cpan.org/~roode/Time-Form ... /Format.pm
http://search.cpan.org/~stevan/Date-For ... rmatter.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/ ... TP/Date.pm


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

Código: Seleccionar todo
#!/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
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Siguiente

Volver a Avanzado

¿Quién está conectado?

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