• Publicidad

Como añadir sesiones con Javascript a tu codigo perl.

Discute todo acerca de JavaScript así como DHTML o la tecnología AJAX.

Como añadir sesiones con Javascript a tu codigo perl.

Notapor macgregor » 2006-02-13 09:14 @426

Hola a todos.

Aqui pongo una descripcion de como he resuelto el problema de crear sesiones para gestionar usuarios.
En mi caso valido a los usuarios con una base de datos, en la que tambien guardo la informacion de sesion
cuando se loguea un usuario.
Cada vez que se loguea un usuario genero un identificador que guardo en la DB y con una cookie en el pc del
cliente.
La cookie se crea con un cgi. LOGIN.CGI

Código: Seleccionar todo
use CGI qw/:standard/;

push(@INC,'pwd','/opt/apache2/cgi-bin/librerias');

require GestorDatos;
require Diario;
require DBI;
      ############   MAIN   ############


if (defined (param()))
{                     # Venimos de la pagina de login
      &inicializaciones;
      &check_user;
}
else      #Formulario inicial, pedimos los datos
{   
   &inicializaciones;
   &form_login;
}

exit(1);


Esa es la estructura principal del cgi.
(ya se que a algunos usuarios del foro no son partidarios de llamar a las funciones con "&"
asi que pueden llamar a las funciones como funcion(); )

La funcion inicializaciones se puede limitar a un
Código: Seleccionar todo
print "Content-Type: text/html; charset=iso-8859-1\n\n";

Segun lo que se quiera hacer :)

El codigo de la funcion form_login unicamente despliega el html con un formulario pidiendo el username y el password.

En la funcion check_user se comprueba el pass, no pongo todo el codigo, ya que cada uno puede hacerlo
como prefiera. En una Base de Datos o un archivo....
Solo pongo la parte en la que se despliega el html con el javascript
Código: Seleccionar todo
sub check_user      #la cookie caduca a las 3 horas (3 * 60 * 60 * 1000)
{
 print qq~
   <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
   <HTML><HEAD>
   <TITLE>TITULO</TITLE>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">      
   <link rel="stylesheet" type="text/css" href="$css">
   <script type="text/javascript" src="$cookie_js"></script>
   <script type="text/JavaScript">
   <!--
      function sesion()
      {
         var expdate = new Date ();
         expdate.setTime (expdate.getTime() + (3 * 60 * 60 * 1000));
         SetCookie ("session", $id_login, expdate);
      }
   // -->
   </script>
   </HEAD>
   <BODY onLoad="sesion()">
      <H2><B>Welcome</B></H2>
      <b>$name</b> now you have access to the restricted tools
      RESTO DE LA PAGINA DE BIENVENIDA.
   </BODY>
   </HTML>
~;                     
}


En el resto de cgi's en los que se necesita saber que usuario esta navegando en ese momento
tienen el siguiente formato en la funcion en la que se despliega el html:

Código: Seleccionar todo
print qq~
   <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
   <HTML>
   <HEAD>
   <TITLE> HYBRIDIZATION </TITLE>
   <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
   <link rel="stylesheet" type="text/css" href="$css">
   <script type="text/javascript" src="$cookie_js"></script>
   <script type="text/JavaScript">
      <!--
      function sesion()
      {
         var id_session=GetCookie("session");
         if (id_session!=null)
         {
            document.formulario.id_login.value=id_session;
         }
         else
         {
            alert("Your entry is expired. Please login again.");
            window.location.href="$cgi_bin/login.cgi";
         }
      }
      // -->
   </script>
   <style type="text/css">
   <!--
      TD,B:{font-size:10px}
   //-->   
   </style>
   </HEAD>
   <body onLoad="sesion()">
   RESTO DE LA PAGINA.....
~;

En la pagina debe haber un formulario con un campo hidden para enviar al cgi el id de sesion que se lee con la cookie.
Código: Seleccionar todo
<input type="hidden" name="id_login" value= "0">

Por ultimo hay que definir en un fichero externo (cookies.js) el contenido de las funciones que leen y escriben las cookies
con javascript, el fichero referenciado en el codigo anterior con la variable $cookie_js

Contenido del fichero cookies.js
Código: Seleccionar todo
// Lee Cookie
function getCookieVal(offset) {
   var endstr = document.cookie.indexOf (";", offset);
   if (endstr == -1) endstr = document.cookie.length;
   return unescape (document.cookie.substring(offset, endstr));
}
// Crea Cookie
function SetCookie (name, value) {
   var argv =SetCookie.arguments;
   var argc = SetCookie.arguments.length;
   var expires = (argc > 2) ? argv[2] : null;
   var path = (argc > 3) ?argv[3] : null;
   var domain = (argc > 4) ? argv[4] : null;
   var secure = (argc > 5) ? argv[5] : false;
   document.cookie = name + "=" + escape (value) +
   ((expires == null) ? "" : ("; expires=" + expires.toGMTString())) +
   ((path == null) ? "" : ("; path=" + path)) +
   ((domain == null) ? "" : ("; domain=" + domain)) +
   ((secure == true) ? "; secure" : "");
}
// Lee datos de Cookie
function GetCookie(name) {
   var arg = name+"=";
   var alen = arg.length;
   var clen = document.cookie.length;
   var i = 0;
   while (i < clen) {
      var j = i + alen;
      if (document.cookie.substring(i, j) == arg) return getCookieVal(j);
      i = document.cookie.indexOf(" ", i) + 1;
      if (i == 0) break;
   }
   return null;
}



Para evitar que algun usuario avanzado edite el fichero de la cookie y pueda acceder con la sesion de otro usuario
he encriptado en el codigo perl el numero identificador que se guarda en la cookie... pero eso ya es otra historia :D

Espero que esta otra forma de trabajar con sesiones les sea util y les ayude...

Un saludo a todos.
Última edición por macgregor el 2006-02-17 12:27 @560, editado 1 vez en total
MACGREGOR [TM]
Avatar de Usuario
macgregor
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2004-12-09 07:32 @355
Ubicación: españa

Publicidad

Lamentaciones

Notapor macgregor » 2006-02-14 04:48 @242

Hola.
Lamento haber tardado tanto en poner el mensaje desde que lo avise, pero me quede sin conexion en el trabajo... un switch que se murio :(
Si tienen alguna duda de como funciona el codigo anterior solo tienen que preguntar :D

Un saludo.
MACGREGOR [TM]
Avatar de Usuario
macgregor
Perlero nuevo
Perlero nuevo
 
Mensajes: 80
Registrado: 2004-12-09 07:32 @355
Ubicación: españa


Volver a JavaScript

¿Quién está conectado?

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

cron