viernes, 11 de febrero de 2011

En la tierra media (por que al final siempre recuerdas el principio)


De la ruina de Beleriand y la caída de Fingolfin

Ahora bien, Fingolfin, Rey del Norte y Rey Supremo de los Noldor, al ver que su pueblo se había hecho numeroso y fuerte y que los Hombres aliados suyos eran muchos y valerosos, pensó una vez más en atacar Angband; porque sabía que vivían en peligro mientras no completaran el círculo del Sitio, y Morgoth pudiera trabajar libremente en las minas profundas, inventando males que nadie era capaz de adivinar antes de que él los revelara. Este propósito era pertinente de acuerdo con lo que el sabía; porque los Noldor no comprendían todavía la fuerza del poder de Morgoth, ni entendían que si libraban solos una guerra contra él no había la menor esperanza de triunfo, fuera que la apresuraran o la demoraran. Pero porque la tierra era hermosa y sus reinos vastos, la mayor parte de los Noldor estaban satisfechos con las cosas tal como eran, confiando en que durarían, y retrasaban un ataque en el que sin duda morirían muchos, fuera en la victoria o en la derrota. Por tanto, estaban poco dispuestos a escuchar a Fingolfin, y los hijos de Fëanor, por aquel tiempo, menos que nadie. Entre los jefes de los Noldor, sólo Angrod y Aegnor pensaban como el rey; porque vivían en regiones desde donde podía verse Thangorodrim, y nunca olvidaban la amenaza de Morgoth. De este modo, los planes de Fingolfin no llegaron a nada, y la tierra aún tuvo paz por un tiempo.
Pero cuando la sexta generación de Hombres después de Bëor y Marach no había alcanzado aún la plenitud de la madurez, habiendo transcurrido por entonces cuatrocientos cincuenta y cinco años desde la llegada de Fingolfin, sucedió el mal que por tanto tiempo habían temido, pero más terrible y repentino todavía que en sus miedos más oscuros. Porque Morgoth había preparado su fuerza en secreto y durante largo tiempo, mientras la malicia de su corazón no dejaba de aumentar y su odio por los Noldor se hacía más amargo; y deseaba no sólo acabar con sus enemigos, sino también destruir y mancillar las tierras que habían tomado y embellecido. Y se dice que su odio pudo más que su prudencia, de modo que si sólo hubiera aguardado un tiempo más, hasta estar bien preparado, los Noldor habrían sido aniquilados por completo. Pero tomó demasiado a la ligera el valor de los Elfos, y a los Hombres no daba todavía ninguna importancia.

Llegó el tiempo del invierno, cuando la noche era oscura y sin luna; y la amplia llanura de Ardgalen se extendía en la sombra bajo las frías estrellas, desde los fuertes en las colinas de los Noldor hasta el pie de Thangorodrim. Las hogueras ardían débilmente y los guardianes eran escasos; pocos velaban en los campamentos de los jinetes de Hithlum. Entonces, de pronto, Morgoth envió desde Thangorodrim caudalosos ríos de llamas que más rápidos que Balrogs se esparcieron por toda la llanura; y las Montañas de Hierro eructaban fuegos venenosos de muchos colores y el humo descendía por el aire, y era mortal. Así pereció Ardgalen, y el fuego devoró sus hierbas, convirtiéndola en un baldío quemado y desolado, de aire polvoriento y sofocante, yermo y sin vida. Desde entonces cambió de nombre y se llamó Anfauglith, el Polvo Asfixiante. Allí tuvieron tumba sin techo montones de huesos chamuscados; porque en ese incendio perecieron muchos de los Noldor que no pudieron llegar a las colinas y fueron atrapados por la precipitación de las llamas. Las alturas de Dorthonion y Ered Wethrin detuvieron los fogosos torrentes, pero los bosques sobre las laderas que daban a Angband ardieron todos, y el humo confundió a los defensores. Así empezó la cuarta de las grandes batallas, Dagor Bragollach, la Batalla de la Llama Súbita.

Al frente de ese fuego avanzó Glaurung el dorado, Padre de los Dragones, ya entonces en la plenitud de su poder, y con un séquito de Balrogs; y detrás de ellos venían los ejércitos negros de los Orcos, en multitudes que los Noldor no habían visto ni imaginado jamás. Y atacaron las fortalezas de los Noldor y quebrantaron el sitio en torno a Angband y mataban a los Noldor y a sus aliados, los Elfos
Grises y los Hombres, en cualquier sitio que los encontraran. Muchos de los más vigorosos de los enemigos de Morgoth fueron destruidos en los primeros días de combate, sorprendidos y dispersos e imposibilitados de unir sus fuerzas. Desde entonces la guerra nunca cesó del todo en Beleriand; pero la Batalla de la Llama Súbita se dio por concluida con la llegada de la primavera, cuando disminuyó la feroz embestida de Morgoth.

De este modo terminó el Sitio de Angband; y los enemigos de Morgoth fueron dispersados y separados los unos de los otros. La mayor parte de los Elfos Grises huyó hacia el sur y abandonó la guerra del norte; muchos fueron recibidos en Doriath, y el reino y la fuerza de Thingol se hicieron más grandes en ese tiempo, pues el poder de la Reina Melian se había extendido más allá de las fronteras y el mal no podía penetrar aún en ese reino escondido. Otros se refugiaron en las fortalezas junto al mar, y en Nargothrond; y algunos huyeron y se ocultaron en Ossiriand, o atravesaron las montañas, errando sin casa en la intemperie. Y el rumor de la guerra y del quebrantamiento del Sitio llegó a oídos de los Hombres en el este de la Tierra Media.
Los hijos de Finarfin fueron los que más sintieron la pujanza del ataque, y Angrod y Aegnor murieron allí, y junto a ellos cayeron Bregolas, señor de la casa de Bëor, y gran parte de los guerreros de ese pueblo. Pero Barahir, el hermano de Bregolas, estaba en una batalla que se libraba más hacia el oeste, cerca del Paso del Sirion. Allí el Rey Finrod Felagund, que se apresuraba desde el sur, quedó aislado con unos pocos de los suyos y fue rodeado en el Marjal de Serech; y habría sido muerto o tomado prisionero, pero acudió Barahir con los más valientes de sus hombres y lo rescató levantando un muro de lanzas alrededor; y se abrieron paso entre las tropas enemigas, y abandonaron el campo de batalla aunque con grandes pérdidas. Así escapó Felagund, y volvió a su profunda fortaleza de Nargothrond; pero hizo un juramento de amistad eterna y de ayuda en toda necesidad a Barahir y a su gente, y como prenda del juramento le dio su anillo. Barahir era ahora por derecho señor de la casa de Bëor, y regresó a Dorthonion; pero la mayor parte del pueblo escapó y se refugió, abandonando sus hogares, en la fortaleza de Hithlum.
Tan grande fue la embestida de Morgoth, que Fingolfin y Fingon no pudieron acudir en ayuda de los hijos de Finarfin; y los ejércitos de Hithlum fueron rechazados con grandes pérdidas hasta las fortalezas de Ered Wethrin, y apenas consiguieron defenderlas de los ataques de los Orcos. Ante los muros de Eithel Sirion cayó Hador, el de Cabellos Dorados, en la defensa de la retaguardia del señor Fingolfin, a la edad de sesenta y seis años; y con él cayó Gundor, su hijo menor, atravesado por muchas flechas; y fueron llorados por los Elfos. Entonces Galdor el Alto sucedió como señor a su padre. Y por causa de la fortaleza y la altura de las Montañas Sombrías, que resistieron el torrente de fuego, y el valor de los Elfos y de los Hombres del Norte, que ni Orcos ni Balrogs pudieron vencer, Hithlum no fue conquistada y amenazó el flanco del ataque de Morgoth; pero un mar de enemigos separó a Fingolfin de su gente.

Porque dura había sido la guerra para los hijos de Fëanor, y casi todas las fronteras orientales habían sido tomadas por asalto. El Paso de Aglon fue forzado, aunque los ejércitos de Morgoth pagaron por ello un alto precio; y Celegorm y Curufin huyeron derrotados hacia el sur y el oeste por las fronteras de Doriath, y cuando por fin llegaron a Nargothrond, buscaron refugio con Finrod Felagund. De este modo acrecentaron la fuerza de Nargothrond; pero habría sido mejor, como se vio después, que se hubieran quedado en el este junto con los de su propio linaje. Maedhros llevó a cabo hazañas de insuperable valor, y los Orcos huían delante de su cara; porque desde el tormento padecido en Thangorodrim, ardía por dentro como una llama blanca, y era como uno que regresa de entre los muertos. Así, la gran fortaleza sobre la Colina de Himring no pudo ser tomada, y muchos de los más valientes que quedaban aún, tanto del pueblo de Dorthonion como de las fronteras orientales, se juntaron allí para ir al encuentro de Maedhros; y durante un tiempo él cerró una vez más el Paso de Aglon, de modo que los Orcos no pudieron penetrar en Beleriand por ese camino. Pero abrumaron a los jinetes del pueblo de Fëanor en Lothlann, pues hacia allí marchó Glaurung, y pasó por la Hondonada de Maglor, y destruyó todas las tierras entre los brazos del Gelion. Y los Orcos tomaron la fortaleza de las laderas occidentales del Monte Rerir y devastaron toda Thargelion, la tierra de Caranthir; y contaminaron el Lago Helevorn. De allí cruzaron el Gelion con fuego y terror y penetraron profundamente en Beleriand Oriental. Maglor se unió a
Maedhros en Himring; pero Caranthir huyó y sumó el resto de su gente al pueblo disperso de los cazadores, Amrod y Amras, y se retiraron y pasaron Ramdal en el sur. En Amon Ereb mantuvieron una guardia y algunas fuerzas de combate, y recibieron la ayuda de los Elfos Verdes; y los Orcos no entraron en Ossiriand, ni tampoco en Taur-im-Duinath y las tierras salvajes del sur.

Llegó entonces a Hithlum la nueva de la caída de Dorthonion y la derrota de los hijos de Finarfin y el exilio de los hijos de Fëanor, expulsados de sus tierras. Entonces vio Fingolfin lo que era para él la ruina total de los Noldor, y la derrota de sus casas más allá de toda recuperación; y lleno de desesperación y de furia, montó a Rochallor, su gran caballo, y cabalgó solo sin que nadie pudiera impedírselo. Atravesó Dor-nu-Fauglith como un viento entre el polvo, y aquellos que alcanzaban a verlo pasar huían azorados, creyendo que había llegado el mismo Oromë; porque corría dominado por una cólera enloquecida, y los ojos le brillaban como los ojos de los Valar. Así pues, llegó solo a las puertas de Angband, e hizo sonar su cuerno, y golpeó una vez más las puertas de bronce, y desafió a Morgoth a un combate singular. Y Morgoth salió.

Ésa fue la última vez durante esas guerras que Morgoth cruzó las puertas de su fortaleza, y se dice que no aceptó el desafío de buen grado; porque aunque su poder era mayor que todas las cosas de este mundo, sólo él entre los Valar conocía el miedo. Pero no podía negarse a aceptar el desafío delante de sus propios capitanes; pues la aguda música del cuerno de Fingolfin resonaba en las rocas, y su voz llegaba penetrante y clara hasta las profundidades de Angband; y Fingolfin llamó a Morgoth cobarde y señor de esclavos. Por lo tanto Morgoth salió, subiendo lentamente desde el trono profundo, y el sonido de sus pisadas era como un trueno bajo tierra. Y salió vestido con una armadura negra; y se erguía ante el Rey como una torre coronada de hierro y el vasto escudo, negro y sin blasón, arrojaba una sombra de nubes tormentosas. Pero Fingolfin brillaba debajo como una estrella; porque la cota de malla era de hilos de plata entretejidos, y en el escudo azul llevaba cristales incrustados; y desenvainó la espada, Ringil, que relució como el hielo.
Entonces Morgoth esgrimió el Martillo de los Mundos Subterráneos, llamado Grond, lo alzó bruscamente, y lo hizo caer como un rayo de tormenta.  Pero Fingolfin saltó a un lado, y Grond abrió un gran boquete en la tierra, de donde salían humo y fuego. Muchas veces intentó Morgoth herirlo y otras tantas Fingolfin esquivó los golpes, como relámpagos lanzados desde una nube oscura; e hirió a Morgoth con siete heridas, y siete veces lanzó Morgoth un grito de angustia, mientras los ejércitos de Angband caían de bruces consternados, y el eco de los gritos resonaba en las Tierras Septentrionales.

Pero por fin el Rey se fatigó, y Morgoth lo abatió con el escudo. Tres veces cayó el Rey de rodillas y tres veces se volvió a levantar con el escudo roto y el yelmo mellado. Pero la tierra estaba desgarrada en boquetes todo alrededor, y el Rey tropezó y cayó de espaldas ante los pies de Morgoth; y le puso Morgoth el pie izquierdo sobre el cuello, y el peso era como el de una montaña derrumbada. No obstante, en un último y desesperado intento, Fingolfin golpeó con Ringil y rebanó el pie, y la sangre manó negra y humeante y llenó los boquetes abiertos por Grond.
De este modo pereció Fingolfin, Rey Supremo de los Noldor, el más orgulloso y valiente de los reyes Elfos de antaño. Los Orcos no se jactaron de ese duelo ante las puertas; ni tampoco lo cantan los Elfos, pues tienen una pena demasiado profunda. No obstante, la historia se recuerda todavía, porque Thorondor, Rey de las Águilas, llevó la nueva a Gondolin y a Hithlum, a lo lejos. Y Morgoth levantó el cuerpo del Rey Elfo y lo quebró, y se lo habría arrojado a los lobos; pero Thorondor se precipitó desde su nido en las cumbres de Crissaegrim, se lanzó sobre Morgoth y le desfiguró la cara. La embestida de las alas de Thorondor era como el ruido de los vientos de Manwë, y aferró el cuerpo con sus garras poderosas y elevándose de súbito por sobre los dardos de los Orcos, se llevó al Rey consigo. Y lo puso sobre la cima de una montaña que daba desde el norte sobre el valle escondido de Gondolin; y Turgon construyó un alto túmulo de piedras sobre su padre. Ningún Orco se aventuró luego a pasar por el monte de Fingolfin ni se atrevió a acercarse a la tumba, hasta que el destino de Gondolin se hubo cumplido, y la traición apareció entre los suyos. Morgoth renqueó siempre de un pie desde ese día, y el dolor de las heridas no se le curó nunca y en la cara llevaba la cicatriz que Thorondor le había hecho.
Grande fue el duelo en Hithlum cuando se supo la caída de Fingolfin, y Fingen, lleno de aflicción, se convirtió en señor de la casa de Fingolfin y el reino de los Noldor; pero a su joven hijo Ereinion (que se llamó luego Gil-galad) lo envió a los Puertos.




Tareaaaaaaaaaaa

Cookies php y sesiones php

Sesiones en Php


Se suele definir como una sesión Php al tiempo en el que un usuario determinado se encuentra navegando en el sitio, dependiendo de la definición podemos decir que si el usuario no navega por el sitio durante una cierta cantidad de minutos ha terminado su sesión en el sitio y a partir de allí cuando vuelve a ingresar lo hace en una nueva sesión. El concepto de sesión es útil porque es posible asociar a cada sesión un identificador único de forma tal de registrar la actividad del usuario en el site y mantener persistencia utilizando únicamente este identificador, el problema pasa a ser como mantener la persistencia del identificador de sesión (SID) de ahora en adelante, y las posibilidades son las que detallamos a continuación:

Cookies Php

Uno de los mecanismos más usados para mantener persistencia con Php es el mecanismo de cookies, inventado por Netscape y hoy en día aceptado por casi todos los browsers, en especial los más populares. El concepto es que mediante un header del protocolo HTTP el server pueda almacenar información en el cliente. A esta información que el server guarda en el cliente se la denomina “cookie”. Las cookies pueden habilitarse o deshabilitarse desde el navegador web por lo que algunos usuarios no lo soportan, son de uso bastante general en muchos web sites a punto tal que en sites de la importancia de yahoo si el usuario no tiene habilitadas las cookies prácticamente no puede utilizar la mayoría de los servicios del site. Cuando el server envía un header con un cookie, el navegador web, si acepta cookies, guarda la información enviada en un archivo de texto con un formato especial. Cada vez que el browser solicita una página del dominio que envió la cookie re-envia la cookie al site, de esta forma es posible mantener persistencia. La información que puede guardarse en una cookie esta limitada por lo que habitualmente se utiliza la misma para mantener el identificador de sesión del usuario almacenándose el resto de los datos necesarios en el servidor usando el session-id de la cookie como clave.
Para crear un cookie en PHP se utiliza la función setcookie cuya sintaxis es la siguiente:
int=setcookie(nombre, valor, expiración, path, dominio);
Nombre : Nombre de la cookie a setear por ejemplo “sesion
Valor : Valor que contendrá la cookie, como por ejemplo “khdhkfdh47”
Expiracion : Fecha de vencimiento de la cookie (fecha en la cual el browser la borra del disco del usuario), debe estar en formato Unix. En general el uso más practico es time()+tiempo donde tiempo es la cantidad de segundos de vida de la cookie.
Path : En general no se usa, suele setearse en “/”
Dominio : Dominio para el cual el cookie es valido eje mplo “.prueba.com” en cuyo caso sirve para algo.prueba.com, site1.prueba.com, site2.prueba.com y todos los de la misma forma.
La función devuelve verdadero si pudo setearse la cookie o falso en caso contrario (por ejemplo si el browser no acepta cookies)
Ejemplo de cookie en Php:
$val=setcookie(“sesion”,”1”,time()+3600,”/”,”.prueba.com”);
Para recuperar el valor de una cookie en Php se debe usar el vector de PHP $HTTP_COOKIE_VARS que es un vector asociativo indexado por nombre de cookie.
Ejemplo para recuperar el valor de una cookie con Php:
$ck=$HTTP_COOKIE_VARS[“sesion”];
Con lo cual se recupera el valor de la cookie.
Las cookies son sumamente practicas para manejar sesiones Php, en cada página se verifica si el usuario tiene seteada la cookie con nombre “session” si la tiene se recupera el valor de la sesión, si no la tiene se crea un identificador de sesión nuevo y único y se setea la cookie php correspondiente con el vencimiento que corresponde según la duración que uno considere necesaria. Luego el identificador de sesión es accesible en cada página para almacenar valores por ejemplo en la base de datos como el nombre del usuario, preferencias de la sesión y otros valores. La recuperación de la cookie y su creación en caso de no existir se puede colocar en un modulo php que luego se incluye en cada página por ejemplo mod_session.php solo hay que recordar en cada página hacer un include(“mod_session.php”); y luego se puede usar la variable $session_id (o el nombre que se le haya dado en el modulo) para guardar y recuperar valores correspondientes a la sesión actual.
2. URL
Otro método posible para pasar información desde una página a otra es mediante el URL de la página en cuestión, usando el URL se pueden pasar datos de una página a otra usando el query string de la forma:
http://dominio/path?query_string
Donde query_string es de la forma: variable=valor&variable2=valor2&variable3=valor3 … etc…
De esta forma podríamos hacer un manejo similar al anterior pero pasando el session_id usando el url en lugar de usando cookies, la desventaja de este método es que todos los links deben generarse dinámicamente en PHP para agregar a la dirección del link el valor del cookie de la forma:
<a href=”http://dominio/path?session=<?print(“$session_id”);?>”>
El funcionamiento es similar, no requiere que el browser tenga habilitados cookies pero altera la forma en que se escriben los links y afea un poco la forma en la cual se muestra la URL de la página actual, podría por ejemplo tener consecuencias como entorpecer la tarea de generar el bookmark de una determinada página.

Sesiones PHP

PHP soporta en forma nativa desde el lenguaje el concepto de sesiones, se pueden manejar sesiones php en forma transparente al usuario, el lenguaje define una constante PHPSESSID con el identificador de cada sesión y se encarga de propagar el mismo usando cookies o bien el URL de la página en caso de que los cookies estén deshabilitados.
Para usar cookies en PHP es necesario invocar la función session_start(); en el comienzo del script, esta función se encarga de recuperar el session_id en la constante $PHPSESSID y si la sesión no existe crea una nueva.
Si PHP esta compilado con la opción –enable-trans-sid el interprete se encarga de re-escribir dinámicamente las URLs agregando el session_id en caso de que el usuario no tenga cookies, en caso contrario hay que modificar los links de la forma:
<a href=”/lugar?PHPSESSID=<?echo “$PHPSESSID”?>”>
PHP dispone además de funciones para “registrar” variables dentro de una sesión, esto se hace llamando a la función session_register(); Por ejemplo:
<?
session_start();
$x=”hola”;
session_register(“x”);
?>
Notar que session_register recibe el “nombre” de la variable a registrar sin “$”. Una vez registrada una variable la misma estará disponible en todas las páginas que usen session_start durante la sesión actual, es decir que si desde la página donde hicimos el session_register el usuario se traslada a otra página que usa session_start entonces la variable $x automáticamente estará definida y con el valor “hola” ya que es una variable registrada dentro de la sesión. Cualquier tipo de variable de PHP puede registrarse con este método, incluyendo objetos (sólo las propiedades del objeto se registran, no los métodos!)
Otras funciones de manejo de sesiones con Php:
session_id(); Devuelve el id de la sesión actual, si se le pasa como parámetro un string cambia el id de la sesión al string pasado, esta función hace lo mismo que la consulta directa a la variable $PHPSESSID
session_destroy(); Destruye la sesión actual y todas las variables registradas.
session_name(); Devuelve el nombre de la sesión actual (PHPSESSID), si se le pasa como parámetro un string cambia el nombre de la sesión y por consiguiente de la variable que contiene el id de la sesión al valor pasado.
session_unregister(variable_name); Elimina de la sesión una variable registrada con session_register
session_is_registered(variable_name); Dice si una variable esta o no registrada en la sesión actual (devuelve true/false), notar que es equivalente a la función isset pero tomando en cuenta la sesión.

Manejo avanzado de sesiones PHP


Una pregunta interesante relativa al manejo de sesiones en PHP es como se almacenan los datos de la sesión (las variables registradas y demás), en PHP por omisión los datos sobre las sesiones se almacenan en archivos en el directorio /tmp, este método funciona correctamente pero tiene 2 inconvenientes:
1. No es fácil compartir sesiones entre servers.
Dado que los datos se almacenan en un file-system una variable “registrada” en un server no puede ser visible en otro ya que el mismo no tiene forma de recuperar el contenido de la misma. (Podría hacerse si se cambia el directorio /tmp a un directorio compartido entre maquinas usando NFS pero este no es el tema aquí)
2. Dada una cantidad de usuarios realmente elevada el método no es eficiente.
Estamos hablando de cantidades de usuarios realmente muy grandes simultáneos, dados los cuales hay demasiadas sesiones por mantener y el file-system se torna lento en la búsqueda y recuperación de los archivos con los datos.
Afortunadamente en PHP es posible redefinir los métodos de almacenamiento que el lenguaje utiliza para almacenar las sesiones Php. Esto se hace con la función session_set_save_handler
Ejemplo:
session_set_save_handler ("open", "close", "read", "write", "destroy", "gc");
Que recibe como parámetros los “nombres” de 6(seis) funciones, cuyos prototipos y funcionalidad son los siguientes:
function open ($save_path, $session_name) Se llama luego de cada session_start, recibe un path y un nombre de sesión que por omisión es PHPSESSID.
function close() Cierra la sesión.
function read ($key) Dada una clave “key” recupera para la sesión actual el valor de la clave pasada.
function write ($key, $val) Guarda un par clave-valor para la sesión actual.
function destroy ($key) Destruye la clave pasada como parámetro.
Function gc($maxlifetime) Garbage collection, se encarga de destruir los datos de las sesiones Php vencidas.
En general en open no es necesario hacer nada ya que todo el manejo de Registración de variables esta dado por read y write. Write recibirá como clave el identificador de la sesión y como datos una estructura interna de php que contiene la representación de todos los datos a almacenar para la sesión. De la misma forma read debe ,dada la clave (session_id), recuperar todos los datos de la sesión y luego php en forma interna setea las variables correspondientes para que sean visibles.
Todas las funciones deben devolver “true” para que el manejo de sesiones funcione.


Auntentificacion en php

Este es un ejemplo simple de autenticación de usuarios usando sesiones en PHP y consultando a una base de datos en MySQL. Voy a evitar pegar demasiado código en el post y me limitare a colocar enlaces hacia otra ubicación donde sea mas inteligible el mismo. (Solo pondré las partes esenciales en el post, el resto de código está en los enlaces)
En primer lugar, algunos datos necesarios:
  • Servidor: localhost
  • Usuario: usuario_mysql
  • Password: clave_mysql
  • Nombre de la base de datos: ejemplos
Luego el esquema simple de la tabla usuarios, que almacenara el nombre del usuario y la clave.
La manera mas práctica de organizar funciones en PHP es ubicarlas en un solo archivo, en este caso lo denominare funciones.php y este es su contenido. Este archivo posee funciones que permiten conectarse a la base de datos, consultar la existencia de un registro en la misma y verificar si la sesión fue iniciada con el nombre de usuario, cada vez que se desee utilizar solo bastaría poner include(‘funciones.php’) para incluirlo en cualquier script PHP.
Una vez que tenemos las funciones creadas, ya podemos empezar con el formulario de entrada (index.php), lo importante es que contenga algo tan simple como esto:
<form method=’POST’ action=’index2.php’>
Usuario <input type=’text’ name=’usuario’/><br/>
Password <input type=’password’ name=’clave’><br/>
<input type=’submit’ value=’Ingresar’/><br/>
</form>
Este formulario enviara dos valores (usuario y clave) hacia el archivo index2.php, este archivo recogerá los datos enviados y los usará en la función conexiones(), si el usuario existe se iniciará la sesión e ingresará a las páginas permitidas para el usuario (ingreso.php, sistema.php), si no existe volverá al formulario de ingreso.
<?php
include (‘funciones.php’);
//usuario y clave pasados por el formulario
$usuario = $_POST['usuario'];
$clave = $_POST['clave'];
//usa la funcion conexiones() que se ubica dentro de funciones.php
if (conexiones($usuario, $clave)){
header(‘Location:ingreso.php’);
} else {
header(‘Location: index.php’);
}
?>
Ingreso.php y todas las páginas que se desean mantener disponibles solo a usuarios registrados deberán tener la forma de:
<?php
include (‘funciones.php’);
if (verificar_usuario()){
//aqui debe venir todo el contenido necesario que solo el usuario validado puede acceder
print “Desconectarse <a href=’salir.php’/>aqui</a>”;
} else {
header(‘Location:index.php’);
}
?>
Donde se usa la función verificar_usuario(), para permitir el acceso si es que el nombre del usuario fue configurado en una sesión, si la función devuelve un valor falso, retornara al formulario de entrada. Es necesario que todas las paginas posean parte de este código, así se evitará que un intruso pueda poner la url de una pagina interna y esta sea visible o accesible sin haber verificado al usuario.
Para salir del sistema y borrar la sesión se usa el archivo salir.php, este archivo contiene instrucciones para destruir la sesión y volver al formulario de ingreso, también esta validado solamente para usuarios verificados:
<?php
include (‘funciones.php’);
if (verificar_usuario()){
session_unset();
session_destroy();
header (‘Location:index.php’);
} else {
header (‘Location:index.php’);
}
?>
Lo que no se debe olvidar al agregar mas paginas al sitio es incluir el archivo de funciones.php y usar la función verificar_usuario() para poder elegir entre el contenido al que debe acceder el usuario validado y el contenido para el visitante (usuario no validado).
Este ha sido un ejemplo simple de uso de sesiones en PHP, consultando a una base de datos en MySQL, existen muchas formas de lograr esto y obviamente mejorarlo, este es solo un ejercicio, útil para comprender el uso de sesiones.