lunes, 8 de julio de 2013

Manejo de sesiones en PHP


Sesiones en PHP 

Las sesiones en PHP son una forma de mantener ciertos datos de un visitante entre los diversos accesos una web. De esta forma se pueden crear aplicaciones donde se le muestra al usuarios datos personalizados de acuerdo a las preferencias o acciones del usuario.

Las sesiones se manejan internamente por un identificador llamado SID (Session ID) el cual esta asociado a una única sesión y que ayuda a identificar el contenido de la sesión actual. Esta variable se propaga automaticamente a traves de Cookies o mediante URL.

Manejo de sesiones en PHP

Todas la variables de sesión son accesibles mediante arrays en la variable global $_SESSION. Adicionalmente ofrece una serie de funciones que permiten manejar detalladamente las sesiones de manera sencilla:
  • session_start inicializa una sesión y crea el identificador de sesión.
  • session_id devuelve el identificador de la sesión actual.
  • session_regenerate_id genera un nuevo identificador para la sesión actual.
  • session_unset limpia todas la variables de sesión registradas.
  • session_destroy elimina todas la variables de sesión registradas.

Crear variables de Sesión

Si deseamos crear variables de sesión para que se puedan utilizar a través de diferentes páginas inicializamos el manejo de sesiones con al función session_start y luego guardamos el dato deseado como variable de sesión utilizando la variable global $_SESSION.
  1. // home.php
  2. session_start();
  3. $_SESSION["country"] = "Peru";
Podríamos mejorar el código si verificamos la existencia de la variable de sesión, si no existe entonces le asignamos un valor.
  1. // home.php
  2. session_start();
  3. if (!isset($_SESSION["country"])) {
  4.     $_SESSION["country"] = "Peru"; 
  5. }

Recuperar variables de Sesión

En las páginas siguientes podríamos acceder a las variables de sesión utilizando:
  1. // user.php
  2. session_start();
  3. echo $_SESSION["country"];
Podríamos utilizar las variables de sesión para verificar si se han hecho acciones previas por parte del usuario, como haber seleccionado tu país por ejemplo si aún no lo ha hecho lo redireccionamos a la página inicial.
  1. // user.php
  2. session_start();
  3. if (!isset($_SESSION["country"])) {
  4.     header("Location: home.php");   
  5. }
  6. echo $_SESSION["country"];

Eliminando datos de sesión

Si deseamos eliminar una determinada variable de sesión le asignamos un valor vacío.
  1. // clear.php
  2. session_start();
  3. $_SESSION["country"] = "";
Ahora si deseamos eliminar todas las variables de sesión lo hacemos de la siguiente forma:
  1. // clear.php
  2. session_start();
  3.  
  4. session_unset();
  5. session_destroy();

Depurando Sesiones

Si se desea depurar las variables de sesión con sus respectivos valores se puede utilizar la función print_r.
  1. // debug.php
  2. session_start();
  3. print_r($_SESSION);

Para mas información acerca del manejo y de las funciones disponibles para el manejo de sesiones pueden leer PHP: Session Functions. Para concluir les dejo los archivos fuente de este artículo para que puedan hacer sus pruebas.

Encriptar y desencriptar cadena con PHP


¿Para que debemos encriptar las contraseñas?

Debemos encriptar las contraseñas de los usuarios para mantener o tratar por lo menos la seguridad de sus datos.
La gente tiene el hábito o mal hábito de usar la misma contraseña para todas sus cuentas, desde su cuenta en facebook hasta la de paypal o peor, la de su cuenta bancaria. Nuestra obligación es proteger ese dato fundamental por si desafortunadamente nuestra base de datos cae en las manos equivocadas, cómo las de un empleado mal intencionado o la de un hacker.


Cualquier programador Web ha podido necesitar pasar datos por $_GET en la url  , es una forma fácil y cómoda de pasar valores de una página a otra, pero en algunos casos puede no ser recomendable y habría que tener un mínimo de precaución, y para estos casos  y otros muchos se puede utilizar esta clase.
Esto puede servirnos en algún que otro caso para evitar inyecciones SQL, y así evitar que alguien nos mangonee lo que no debe.

Primero: Encriptar

function encrypt($string, $key) {
   $result = '';
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)+ord($keychar));
      $result.=$char;
   }
   return base64_encode($result);
}

Se utiliza un código secreto, que es el que se pone en $key y que cuando desencriptemos necesitaremos saberlo para que lo haga correctamente.
Para encriptar una cadena escribimos
$cadena_encriptada = encrypt("LA CADENA A ENCRIPTAR","LA CLAVE");

Segundo: Desencriptar

function decrypt($string, $key) {
   $result = '';
   $string = base64_decode($string);
   for($i=0; $i<strlen($string); $i++) {
      $char = substr($string, $i, 1);
      $keychar = substr($key, ($i % strlen($key))-1, 1);
      $char = chr(ord($char)-ord($keychar));
      $result.=$char;
   }
   return $result;
}

Y para desencriptar la cadena escribimos
$cadena_desencriptada = decrypt("la cadena encriptada","la clave que se usó para encriptarla");