Quizá por el título muchos de los lectores puedan pensar que se trata de otro pequeño manual copiado de php.net donde se explica como usar las variables de sesión, pero en este caso voy a ir un poco mas allá.

Tenía que crear un script y me hacía falta usar variables de aplicación, pero php no tiene ese tipo de variables. Googleando un poco, encontré módulos en fase beta para añadirle esta funcionalidad, pero como el servidor lo tengo en producción, no me interesaba hacerlo, asi que empecé a desarrollar un script que las simulara.

Al cabo de una hora y varias pruebas lo tenía listo, funcionando perfectamente, pero quise ir aún mas allá. ¿Por que no manejar a nuestro antojo las variables de sesión de TODOS los usuarios del servidor?

Por defecto, el manejador de variables de sesión de php utiliza ficheros temporales para almacenar estas variables, pero se puede utilizar una bbdd o cualquier otro metodo. En mi caso, voy a leer estos ficheros temporales mencionados y utilizar la información que nos interese.

En primer lugar, tenemos que localizar donde se almacenan estos ficheros. En mi servidor estaban en /var/lib/php5 pero también podrían ser almacenadas en /tmp.

Una vez que hemos localizado estos ficheros, si se nos ocurre editar uno de ellos (con mucho cuidado, sobre todo si estamos en un servidor en producción) veremos que es un fichero en texto plano y almacena las variables del usuario.

La primera impresión que nos da el fichero, es que las variables han sido almacenadas usando la funcion de php serialize(), pero no es asi. El formato es muy similar pero no igual. Quizá a alguno se le ocurra crear parser, pero si se tienen en cuenta un par de detalles, es mucho mas sencillo hacerlo con la funcion session_decode().

Pero ojo con esta función. Si la ejecutamos, cargaremos en nuestra sesión las variables de otra sesión, por lo que los resultados pueden no ser los esperados. Para ello, tenemos que guardar nuestras variables de sesión, cargar las nuevas, trabajar con ellas, guardarlas si es necesario y volver a cargar las nuestras.

Con este código guardamos nuestras variables en un fichero temporal
/*
Programador: Francisco Javier Sánchez Galián
Fecha: Agosto 2012.

Este fichero analiza las sesiones que hay activas en el servidor y cada vez que se ejecuta, genera un informe en tiempo real.
*/

session_start();

//Definimos la ruta de los ficheros de sesiones
define(«RutaSesiones»,»/var/lib/php5/»);
define(«RutaSesionesTMP»,»/tmp/»);

//Guardamos los datos de nuestra sesion en un fichero temporal
file_put_contents(RutaSesionesTMP.session_id(), session_encode());

En el siguiente fragmento de código, creamos un bucle que recorre todo el directorio donde se almacenan los ficheros y asi de esta manera, poder leerlos todos.

$Directorio=opendir(RutaSesiones);
while ($archivo = readdir($Directorio)) {

if($archivo!=».» && $archivo!=»..») {
//Abrimos fichero
$contenido=file_get_contents(RutaSesiones.$archivo);
session_decode($contenido);

… Aqui trabajamos con las variables
… Si deseamos guardarlas, solamente tendríamos que utilizar de nuevo file_put_contents()
}

Si somos los administradores del servidor, tenemos que tener en cuentra que cualquier usuario que pueda leer estos ficheros podría obtener información muy valiosa y sobre todo hacer mucho daño a los demas usuarios del servidor, como por ejemplo, suplantar la identidad.

Categories:

No responses yet

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Time limit is exhausted. Please reload CAPTCHA.