Perl en Español

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

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

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Javascript
Mensaje Lun Feb 13, 2006 8:14 am
macgregor
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Dic 2004
Mensajes: 117
Ubicación: españa
Como añadir sesiones con Javascript a tu codigo perl. Responder citando

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:

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:
print "Content-Type: text/html; charset=iso-8859-1\n\n";

Segun lo que se quiera hacer Smile

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:

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:

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:
<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:

// 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 Very Happy

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

Un saludo a todos.

Ultima edición por macgregor el Vie Feb 17, 2006 11:27 am, editado 1 vez
Mensaje Mar Feb 14, 2006 3:48 am
macgregor
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Dic 2004
Mensajes: 117
Ubicación: españa
Lamentaciones Responder citando

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 Sad
Si tienen alguna duda de como funciona el codigo anterior solo tienen que preguntar Very Happy

Un saludo.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Javascript Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group