Curso de PHP y MySQL
José Gómez Castaño
 

Autenticación

Las variables de servidor son un tipo especial de variables, ya definidas por el lenguaje, que almacenan valores relativos al servidor donde se esta ejecutando nuestro programa. Estas variables se encuentran almacenadas en un Array Asociativo ya declarado con el nombre $_SERVER. Un pequeño ejemplo nos ayudará a obtenerlas

<?php
foreach($_SERVER as $key => $value){
	echo $key ." = ". $value ."<br>";
} 
?>

Envío de datos del Cliente al Servidor

Las variables conteniendo los valores generados en el cliente, se envían al servidor mediante los Arrays $_GET[nombreCampo] y $_POST[nombreCampo]. Estas almacenan el valor de los campos de un QueryString y de un formulario enviado por método POST. En caso de querer recoger los datos enviados independientemente del método utilizado, se utiliza el array $_REQUEST[nombre].

Cabeceras HTTP

El protocolo HTTP incluye el envío de variables en las cabeceras que se envían desde el navegador cliente hasta el servidor. Estas variables se encuentran definidas en la RFC 2616. Una lista de ellas se describen en Cibernetia. Estas variables con sus valores, llegan al servidor en forma de Array que se puede obtener a partir de la variable $http_response_header. Un ejemplo sencillo de acceso a ellas sería el siguiente:

<?php
// obtenemos el contenido
file_get_contents("http://jpl.nasa.gov");

foreach(http_response_header as $key => $value){
	echo $key ." = ". $value ."<br>";
} 
?>

Control de Sesiones

Una de ellas es $_SESSION que almacena en un array asociativo las variables de sesion. Como se ha dicho antes, estas son variables creadad por el usuario, pero que se almacenan en el servidor y es posible utilizarlas durante toda la sesion del usuario. De esta forma son ideales para almacenar informacion sobre el usuario o su actividad durante la navegacion. Su rol, historial de navegacion, o selecciones. El uso de estas variables es mas seguro, a la hora de guardar informacion, que el uso de cookies, ya que nunca salen del servidor. Este es un medio eficaz de compartir informacion entre diferentes scripts, ya que la visibilidad de estas variables es posible desde todos los que visite el usuraio durante su sesion de navegacion.

Vamos a ver un ejemplo en el que usamos estas variables para almacenar quien es el usuario una vez iniciada la sesion y en funcion de ello le dejaremos o no acceder a un contenido. Para ello vamos a crear un formulario de inicio de sesion con un campo usuario y clave. Permitiremos dos usuarios (pepe/pepe con rol 1 y ana/ana con rol 2) El script quien.php recogera estos valores y le asignara el rol correspondiente, mostrando a los dos los enlaces a las paginas pepe.php y ana.php. En cada una de ellas se comprobara tanto si se tiene permiso para acceder como si se tiene el rol adecuado.

Este es el formulario:

<?php
	// Se inicia la sesion
	session_start();
?>
<html>
<head>
<title>Control de usuarios</title>
</head>
<body>
<?php
	// Si se ha devuelto un error de inicio de sesion, se indica
	echo $_SESSION['ERROR'];
?>
Usuario
Contraseña
</body> </html>

Este es quien.php

<?php

// Iniciamos la sesión
session_start();

// Registramos la variable ROL en la sesion del usuario
session_register("ERROR");
session_register("ROL");

// Comprobamos que el usuario tiene permiso. Esto se cambiará por una consulta a la Base de Datos
if (($_POST['usuario'] == "pepe") and ($_POST['clave'] == "pepe")){

	$_SESSION['ROL'] = "1";

}else if(($_POST['usuario'] == "ana") and ($_POST['clave'] == "ana")){

	$_SESSION['ROL'] = "2";
	
}else{

	// Redirigimos al usuario al inicio de sesión
	$_SESSION['ERROR'] = "No tiene permiso para acceder";
	header('Location:login.php');
	exit;
}

?>

<html>
<head>
<title>Control de usuarios</title>
</head>
<body>

Página de Pepe

Página de Ana

</body> </html>

Tenemos siempre que empezar con la funcion session_start(); para poder usar las variables de sesion. Despues comprobamos el usuario y clave y en funcion de ellos, le asignamos un rol. Si no es correcto, se le devuelve al inicio de sesion usando la variable de sesion ERROR en la linea. Una vez asignado el rol, se muestran a usuario los enlaces. Antes de usar cualquier variable, tenemos que registrarla en la sesión del usuario mediante la función session_register("nombreVariable").

Ahora vamos con las paginas personales

<?php
session_start();

if ((!$_SESSION['ROL']) || ($_SESSION['ROL'] != "2")){
	// Redirigimos al usuario al inicio de sesión
	$_SESSION[ERROR] = "No tiene permiso para acceder";
	header('Location:login.php');
	exit;
}else{
	echo "Bienvenido usuario con rol 2";
}

?>
 

Comenzamos con session_start(); y hacemos una comprobacion de la variable de sesion ROL. Si no existe es que el usuario no ha iniciado sesion correctamente y se le devuelve al formulario inicial. Despues controlamos el ROL.

De esta forma podemos controlar el acceso a todas las paginas de nuestra apalicacion.


 
  • Superglobals
  • $GLOBALS
  • $_SERVER
  • $_GET
  • $_POST
  • $_FILES
  • $_REQUEST
  • $_SESSION
  • $_ENV
  • $_COOKIE
  • $php_errormsg
  • $HTTP_RAW_POST_DATA
  • $http_response_header
  • $argc
  • $argv
  • Creative Commons License
    Curso PHP y MySQL by José Gómez Castaño is licensed under a Creative Commons Reconocimiento-Compartir bajo la misma licencia 3.0 España License.
    Based on a work at www.meridi.es/cursos/php.