Vous êtes sur la page 1sur 12

Que son sesiones?

Nuevo usuario: Registro


Acceso de usuarios: Ingresar
Validacin de usuarios
Terminar sesin: Logout
Dar privilegios a usuarios

Empezaremos esta pequea guia, de como crear una zona para usuarios registrados
usandos sesiones, explicando lo que son realmente las sesiones:

Las sesiones son un identificador creado para cada usuario, en el que se acumula
informacin en forma de variables. Seguramente habras visto en muchas urls variables
del tipo ids=Asd212saj100Xssdawggs esto es el identificador que guarda las variables.

Existen dos formas de propagar las sesiones, mediante cookies o mediante la url. El
sistema de cookies es menos fiable, ya que si el visitante no tiene habilitadas las
cookies, no funcionara. Personalmente prefiero este sistema, aunque tenga estos
inconvenientes, pero el propagar sesiones por la URL es un problema para los
buscadores... aunque eso es otro tema.

Empezaremos familiarizandonos con las sesiones:

<?

//Evitamos que la sesion se guarde en el cache del navegador


session_cache_limiter('nocache,private');

//iniciamos la sesin
session_start();

//asignamos un valor a la variable de sesin


$snick=$nick;

//registramos esa variable de sesin asignandole un nombre


session_register('snick');

//asignamos un valor a otra variable de sesin


$spass=$password;

//registramos una nueva variable de sesin


session_register('spass');

//recogemos las variables de sesin y sus valores en una cadena


$codifica=session_encode();
?>

Realmente hemos asignado dos variables a la sesin: nick y password, los dos
parametros que usaremos para identificar a nuestros usuarios.

Que son sesiones?


Nuevo usuario:
Registro
Acceso de usuarios: Ingresar
Validacin de usuarios
Terminar sesin: Logout
Dar privilegios a usuarios

Lo primero que queremos son usuarios registrados, para ello, empezaremos creando la
base de datos donde almacenaremos su informacin:

CREATE TABLE `usuarios` (


`id` bigint(7) NOT NULL auto_increment,
`nick` varchar(100) NOT NULL default '',
`password` varchar(100) NOT NULL default '',
`nombre` varchar(255) default NULL,
`email` varchar(100) default NULL,
`url` varchar(150) default NULL,
`nivel` varchar(5) NOT NULL default '',
KEY `id` (`id`)
) TYPE=MyISAM;

La finla nivel, la puedes quitar, ya que es solo, para desarrollarla en el tema de


privilegios a usuarios, y solo si vas a utilizar esta opcin.

Ahora que ya tenemos nuestra tabla creada, empezaremos por crear el formulario de
alta, para nuevos usuarios:

Para ello tendras que incluir los campos que se indican en la tabla, y al final del archivo
incluir un script php que aada los valores en la tabla, algo asi (recuerda que esto es
solo una idea que debes desarrollar):

formulario_alta.php

<form name="form1" method="post" action="registrar.php">


<p> Nick
<input name="nick" type="text" id="nick">
</p>
<p> Password
<input name="password" type="text" id="password">
</p>
<p> Nombre
<input name="nombre" type="text" id="nombre">
</p>
<p> Email
<input name="email" type="text" id="email">
</p>
<p> Url
<input name="url" type="text" id="url">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>

<?php

//conexion MySQL

$host="localhost";
$user="user";
$pass="password";
$db="nombre base de datos";

//Conectamos a la base de datos

$link = mysql_connect ($host, $user, $pass);


mysql_select_db($db, $link);

//Aadir datos a base de datos


$sql = "INSERT INTO usuarios (nick,password,nombre,email,url) VALUES
('$nick','$password','$nombre','$email','$url')";

//Cerramos la conexin
mysql_close();

?>

Lo que hemos hecho, es que el formulario se llame a si mismo, y en un solo archivo


podamos introducir el formulario y el aadir la informacin a la base de datos.

Podemos depurar este sistema aadiendo:


<?php

//Conexin Mysql.

//Aadir datos a base de datos


$sql = "INSERT INTO usuarios (nick,password,nombre,email,url) VALUES
('$nick','$password','$nombre','$email','$url')";

//Validacion
if (mysql_db_query ($db, $sql, $link))
{
echo ("Alta exitosa");
}
else
{
echo ("Alta erronea. Intentalo otra vez");
}

//Cerramos la conexin
mysql_close();

?>

Ya tenemos a los usuarios en la base de datos, ahora nos toca identificarlos y dejarlos
entrar por la zona de suarios.

Que son sesiones?


Nuevo usuario: Registro
Acceso usuarios:
Ingresar
Validacin de usuarios
Terminar sesin: Logout
Dar privilegios a usuarios

Empezaremos creando el formulario de ingreso para usuarios, sera realmente sencillo:


un campo para el nick y otro para el password, y su respectivo botn de envio de
variales:

Acceder.php

<form name="form1" method="post" action="codifica.php">


<p>Nick
<input name="nick" type="text" id="nick">
</p>
<p>Password
<input name="password" type="text" id="password">
</p>
<p>
<input type="submit" name="Submit" value="Enviar">
</p>
</form>

Si os fijais, estamos enviando las variables de nick y password a un archivo llamado


codifica: qu es esto? muy sencillo, el archivo que creara las sesiones de inicio.
Empecemos a crearlo:

codifica.php

<?

//Evitamos que la sesion se guarde en el cache del navegador


session_cache_limiter('nocache,private');

//iniciamos la sesin
session_start();

//asignamos un valor a la variable de sesin


$snick=$nick;

//registramos esa variable de sesin asignandole un nombre


session_register('snick');

//asignamos un valor a otra variable de sesin


$spass=$password;

//registramos una nueva variable de sesin


session_register('spass');

//recogemos las variables de sesin y sus valores en una cadena


$codifica=session_encode();

//Redirigimos a la pagina principal


header("Location: http://www.tupaginaweb.com/usuarios/ingresar.php");
?>

Con este codigo, hemos creado la variable de sesin que incluir el nick y el
password, y que se propagar por todas las paginas hasta que terminemos la sesin,
por lo que nuestro visitante no tendr que ir identificndose en cada seccin.

El codigo creo que se comprende muy bien con las explicaciones que van el el codigo,
tal vez solo matizar que la ultima sentencia del codigo, es una redireccin hacia el
archivo: ingresar.php, modifica esto y adapta la ruta al archivo en funcin de tu
situacin. El el siguiente capitulo explicaremos como crear el archivo: ingresar.php.

Que son sesiones?


Nuevo usuario: Registro
Acceso usuarios: Ingresar
Validacin de usuarios
Terminar sesin: Logout
Dar privilegios a usuarios

Ya tenemos el usuario creado, este esta intentando ingresar en la zona de usuarios mediante
el formulario de acceso, este formulario ha creado las variables... ahora solo queda
identificar al usuario comparando esas variables con la base de datos: lo haremos mediante
el arhivo: ingresar.php

ingresar.php

<?php
//conexion MySQL

$host="localhost";
$user="usuario";
$pass="password";
$db="base de datos";
$tabla="usuarios";

//Conectamos a la base de datos

$link = mysql_connect ($host, $user, $pass);


mysql_select_db($db, $link);

//Buscamos los datos del usuario con la base de datos

$resultado = mysql_query("select * from $tabla where nick='$snick' AND


password='$spass'");

//Recobramos informacion del usuario

$conseguir_informacion=@mysql_fetch_array($resultado);

$usuario_id=$conseguir_informacion[id];
$usuario_nick=$conseguir_informacion[nick];

$usuario_pass=$conseguir_informacion[password];

//Comparamos los datos del formulario con los de la base de datos

if($usuario_nick=="" AND $usuario_pass=="" OR $usuario_pass=="") {

//Si son falsos...

?>
Esta es una zona para usuarios registrados. No tienes acceso.
<?

}
else
{

//Si son verdad...

?>
Bien venido a la zona de usuario.
//Tambien puedes poner una redireccin con javascript hacia la pagina de usuarios
registrados

<?

//cerramos la conexion

mysql_close ($link);

?>

Como puedes ver es un codigo muy simplificado, de ti dependera desarrollarlo hasta


las necesidades de tu web.

Este seria un ejemplo para una sola pagina de acceso restringido (yo la usaria como
menu principal de la zona de usuarios), pero ahora queremos desarrollar toda una
seccin de usuarios registrados con muchas subpaginas con control de acceso. Para
ello usuaremos el siguiente codigo, que no solo permitira que solo nuestros usuarios
entren en nuestras paginas, sino que crearemos una medida de seguridad ocultando la
url final:

<?php
//conexion MySQL

$host="localhost";
$user="usuario";
$pass="password";
$db="base datos";
$tabla="usuarios";

//Conectamos a la base de datos

$link = mysql_connect ($host, $user, $pass);


mysql_select_db($db, $link);

//Buscamos los datos del usuario con la base de datos

$resultado = mysql_query("select * from $tabla where nick='$snick' AND


password='$spass' AND nivel='2'");

//Recobramos informacion del usuario

$conseguir_informacion=@mysql_fetch_array($resultado);

$usuario_id=$conseguir_informacion[id];

$usuario_nick=$conseguir_informacion[nick];

$usuario_pass=$conseguir_informacion[PASSWORD];

//Comparamos los datos del formulario con los de la base de datos

if($usuario_nick=="" AND $usuario_pass=="" OR $usuario_pass=="") {

//Si son falsos...

?>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif"> <font face="Verdana,
Arial, Helvetica, sans-serif">
<div align="center">
<p><font color="#FF0000" face="Verdana, Arial, Helvetica, sans-
serif"><strong>Estas intentando
entrar en una zona de nivel superior al tuyo<font
size="2">.</font></strong></font></p>
<p><font face="Verdana, Arial, Helvetica, sans-serif"><font size="2">Tu nivel
es de: <strong>USUARIO</strong>, para poder entrar a esta zona tienes que
ser: <strong>ADMINISTRADOR</strong><br>
</font></font> </p>
</div>
<?

}else {

//Si son verdad...

require ("pagina_para_usuarios.php");

//cerramos la conexion

mysql_close ($link);
}

?>

Que hace este codigo? Pues simplemente, incluye en esta pagina un archivo remoto
(que debes ocultar en una carpeta lejos de los archivo de la zona de usuarios, y que
solo tu conozcas) que en teoria solo es para usuarios. En el requiere final deberas
poner la ruta hacia el archivo SOLO PARA USUARIOS que deseas llamar. Recuerda,
oculta el archivo en una carpeta segura, por ejemplo:

http://www.midominio.com/ocultar/secciones/pagina_para_usuarios.php

Intenta que la zona de usuarios y este archivo esten en carpetas distintas.

Que son sesiones?


Nuevo usuario: Registro
Acceso usuarios: Ingresar
Validacin de usuarios
Terminar sesin:
Logout
Dar privilegios a usuarios

Una de las cosas fundamentales en este tipo de script, es que los datos del cliente se
borren, y no se almacenen. Queremos sobre todo que nuestro sistema de usuarios sea
seguro. Para ello, daremos la opccin de terminar la sesin al usuario, de forma que
sus datos permanezcan de forma segura. Lo haremo en el archivo logout.php

logout.php
<?
session_start();
session_unset();
session_destroy();
header("Location: logout_confirmacion.php");
exit();
?>

En resumen: Creamos una sesin, destruimos las variables que almacena y borramos
la sesin. En este ejemplo he usado una variante (muy utilizada por los webmasters)
que lo que hace es redirigir al usuario a la pagina principal del web, usando un pagina
de enlace: logout_confirmacion.php. Esta pagina lo unico que hace es informandonos
de que la sesin se esta cerrando y que seremos redirigidos a la pagina principal
(muchos foros usan este sistema).

logout_confirmacion.php

<meta http-equiv="refresh" content="5;url=http://www.tudominio.com/" />


<div align="center">
<p>&nbsp;</p>
<p>&nbsp;</p>
<table width="60%" border="0" cellpadding="1" cellspacing="1"
bgcolor="#000000">
<tr>
<td height="173" bgcolor="#CCCCCC"><div align="center">
<p><font size="3" face="Verdana, Arial, Helvetica, sans-serif"><strong>La
sesion de usuario se esta cerrando....</strong></font></p>
<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Espera
unos segundos y seras redirigido a la pagina principal de
<strong>TUDOMINIO.COM</strong></font></p>
<p><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Es necesario que
esperes para una correcta eliminacion
de tus datos en el servidor...</font></p>
</div></td>
</tr>
</table>
<p>&nbsp;</p>
</div>

Esta pagina de salida, nos redirigira a la pagina principal de nuestro web en 5


segundos. Modifica los datos en negrita, por los de tu web.

Para utilizar el logout.php solo tienes que poner un enlace hacia el archivo, algo asi:
<a href="http://www.tudominio.com/logout.php"> Logout - terminar sesion
</a>

Espero que este pequeo tutorial de como crear un sistema de usuarios mediante
sesiones, te sea realmente til. En el siguiente capitulo te explicaremos como mejorar
un poco el codigo, y dar diversos permisos a los usuarios.

Que son sesiones?


Nuevo usuario: Registro
Acceso usuarios: Ingresar
Validacin de usuarios
Terminar sesin: Logout
Dar privilegios a
usuarios

Este codigo no hace distincin entre usuarios normales y administradores. Como hacemos
para que a las paginas de administracin solo puedan entrar los administradores?

Si recuerdas en el capitulo 2, explicamos como crear la base de datos, y te comentabamos


que el campo "nivel" era opcional. En este caso, necesitaremos ese campo para asignar
niveles a los usuarios. Ahora lo que necesitamos cambiar es el archivo:
formulario_alta.php

$sql = "INSERT INTO usuarios (nick,password,nombre,email,url) VALUES


('$nick','$password','$nombre','$email','$url')";

Cambiaremos esta linea por:

$sql = "INSERT INTO usuarios (nick,password,nombre,email,url,nivel) VALUES


('$nick','$password','$nombre','$email','$url','0')";

Hemos aadido el campo nivel, con el valor 0. Este sera el valor por defecto para
usuarios normales.

Para asignar privilegios de administracin, solo tendras que cambiar este valor a por
ejemplo 1. Este puede ser el valor de administrador. Puedes cambiarlo usando tu
phpadmin o creando un script que lo cambie directamente.

Ahora en todas las paginas que queramos que solo vean los administridores,
tendremos que poner el siguiente codigo en el archivo: ingresar.php
ingresar.php

//Conectamos a la base de datos

$link = mysql_connect ($host, $user, $pass);


mysql_select_db($db, $link);

//Buscamos los datos del usuario con la base de datos

$resultado = mysql_query("select * from $tabla where nick='$snick' AND


password='$spass' AND nivel='1'");

Con esto aadimos la condicin de que el usuario tiene que tener nivel 1. Este es un
pequeo ejemplo de uso, recuerda que los limites los pones tu. Desarrolla la idea y
adaptala a tus necesidades.

Vous aimerez peut-être aussi