Sei sulla pagina 1di 4

Sesiones pHP

Este es un tutorial bsico para el manejo y control de sesiones en PHP, una de las consultas ms realizadas sobre este lenguaje.
Por Miguel Angel Alvarez
Licencia Copyleft. Puedes reproducirlo citando al autor y enlazando con DesarrolloWeb.com.

Veamos un sencillo ejemplo de uso de sesiones para ilustrar a los usuarios ms inexpertos el manejo de sesiones con PHP en sus procesos ms bsicos, como son la inicializacin de sesiones, comprobar si existen variables de sesin, crearlas y modificarlas. En este ejemplo vamos a hacer un sistema para llevar la cuenta de las pginas que ha visto un visitante. Es decir, si entra a una pgina del sitio por primera vez, contamos que ha visto una pgina, luego con cada pgina adicional que visite, seguiremos acumulando 1 en la cuenta de pginas vistas dentro del sitio. Del mismo modo, si se recarga una pgina o se vuelve a la misma pgina que ya se estuvo, tambin haremos que se acumule 1 en su cuenta. Para aprender a trabajar con sesiones recomendamos leer el artculo sesiones en PHP. Lo que tendremos que hacer en este ejercicio es lo siguiente: - Inicializar la sesin - Si no tenemos el contador de pginas creado, lo inicializamos al valor 1 - Si tenemos el contador de pginas creado, lo incrementamos en 1.

< ? session_start(); if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; } ?> < html> < head> <title>Contar pginas vistas por un usuario en toda su sesin</title>

< /head>

< body> < ? echo "Desde que entraste has visto " . $_SESSION["cuenta_paginas"] . " pginas"; ?> < br> < br> < a href="otracuenta.php">Ver otra pgina</a> < /body> < /html>

Como se ha podido ver, lo primero que debemos hacer es inicializar la sesin con session_start(). Luego de inicializar la sesin podemos trabajar con variables de sesin en cualquier lugar del cdigo PHP. Nosotros vamos a crear y utilizar una variable de sesin para llevar la cuenta del nmero de pginas que hemos visto.

$_SESSION["cuenta_paginas"]

Para ver si una variable de sesin ha sido creada podemos utilizar la funcin isset() pasndole como parmetro la variable que deseamos saber si ha sido creada. Si no fue creada anteriormente, simplemente la creamos (inicializando su valor a 1). Si fue creada, pues que tenemos que incrementar en 1. Eso se consigue con este cdigo:

if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; }

Eso es todo! Ahora lo que se supone que tenemos son otras pginas en el mismo sitio que tambin tienen que incrementar en 1 el contador de pginas vistas por ese usuario en esa sesin.

Eso lo podramos hacer con el mismo trozo de cdigo, como el que hemos visto antes, colocado al principio del archivo PHP.

< ? session_start(); if (!isset($_SESSION["cuenta_paginas"])){ $_SESSION["cuenta_paginas"] = 1; }else{ $_SESSION["cuenta_paginas"]++; } ?>

Luego, en cualquier momento, si deseamos mostrar el nmero de pginas vistas en un momento dado, tendramos que hacer algo como esto:

< ? echo "Has visto " . $_SESSION["cuenta_paginas"] . " pginas, contando actualizaciones de paginas"; ?>

Podemos ver el ejemplo relatado en funcionamiento.

Proteger Descargas en PHP


Muchas veces, desde otra pgina web, enlazan directamente a un archivo de nuestro servidor, esto sobrecarga nuesto ancho de banda sin reportarnos ningn beneficio, para evitarlo podemos tomar algunas medidas a la hora de enviar el archivo. Comprovar el referente Podemos restringir a que solo se pueda descargar el archivo cuando se proviene de una determinada pgina, esto sera efectivo si no hubiera usuarios que navegan detrs de proxys que eliminan el referente, en este caso ninguno de estos usuarios podra descargar el archivo ni que proviniera de la pgina correcta. Usar una cookie En mi opinin este mtodo es mas eficaz, guardaremos una cookie en la pgina donde situamos el enlace hacia nuestra descarga, de esta manera luego podremos comprobar que prviamente se ha pasado por esa pgina, es decir, que la descarga est autorizada: <?php // Esto tiene que estar al principio del // todo del documento antes de enviar nada // al navegador (ni siquiera un espacio) // de lo contrario tendremos un error setcookie ( 'descarga' , '1' );

?> Luego situaremos el archivo a descargar en una carpeta secreta a la que daremos un nombre aleatrio para que no sea fcil de encontrar, por ejemplo 23hi938fdfgh39, y crearemos el siguiente archivo: descargar.php <?php // Indicamos el nombre del directrio define ( 'dir' , '23hi938fdfgh39' ); // Comprovamos que exista la cookie if( $_COOKIE [ 'descarga' ] == '1' ){ // Si existe la cookie intentamos // leer el archivo $archivo = $_GET [ 'archivo' ]; if( file_exists ( dir . '/' . $archivo )){ // Si existe el archivo lo enviamos header ( 'Content-Type: application/octet-stream' ); header ( 'Content-Disposition: attachment; filename=' . $archivo ); echo file_get_contents ( dir . '/' . $archivo ); } else { // Sino existe el archivo enviamos // un error 404 header ( 'HTTP/1.0 404 Not Found' ); echo '<h1>ERROR</h1><br />No se h' , 'a encontrado el archivo sol' , 'icitado' ; } } else { // Sino hay cookie enviamos un error // 401 header ( 'HTTP/1.0 401 Unauthorized' ); echo '<h1>ERROR</h1><br />No puedes' , 'acceder a este archivo desde ' , 'un servidor externo' ; } ?> Entonces desde la pgina donde hemos creado la cookie podemos llamar a descargar el archivo haciendo un enlace hcia descargar.php?archivo=NOMBRE.ZIP, por ejemplo: <a href="descargar.php?archivo=chat.zip">Descargar</a> Y con este sencillo mtodo habremos protegido nuestros archivos de la descarga externa mediante cookies. Artculo por cortesa de Eloi de San Martn

Potrebbero piacerti anche