Ver Mensaje Individual
  #8  
Antiguo 01-10-2007
semptrion semptrion is offline
Miembro
 
Registrado: abr 2007
Posts: 112
Reputación: 18
semptrion Va por buen camino
El tema de las sesiones

Me parece bien que te documentes antes de utilizar "lo que todo el mundo" ya que un exceso de confianza puede resulta en serios problemas a la larga.

El administrador de sesiones de php intenta transferir en id de la sesión tanto por cookies (puaj!) como por get, automáticamente.

Si no esta haciéndolo, puedes hacerlo tu directamente. Por ejemplo, cuando el usuario se conecta, creas un número de sesión y lo transfieres en cada una de tus peticiones get.

1. Para crear el número de sesion:
Código PHP:
$idSession md5uniqidrand() ) * microtime()); 
2. Creas la sesión con ese número
Código PHP:
session_id$idSession ); 
3. Transfieres a la siguiente mediante get.
Código PHP:
echo '<a href="foo.php?idSession=' $idSession ' title="etc">Tócame</a>'
Es decir, todas tus anclas deberán enviar el idSession. Lo mismo cuando haces solicitudes Post.
4. Recibes lo enviado y abres la siguiente sesión.
Código PHP:
$idSession $_GET['idSession']; 
Obviamente si $idSession está vacía, entonces te vas al paso 1. Sino, directamente al paso 2.

Hasta ahí es lo que puedes hacer para crear, enviar y recibir el id de una sesión sin dramas. Eso sí, es en extremo laborioso el tema.

Hace años, en amazon incluian el número de sesión en el url pero no como una variable get, sino como parte de la ruta. Me explico mejor. Supongamos que generas el siguiente número de sesión:

8a1baa671439cbbc56a613ebb4f111f6

mediante el método que acabo de explicarte, tus urls se verían así como:

http://www.example.com/foo.php?idSes...a613ebb4f111f6
Incluyendo en la ruta se vería algo así como:

http://www.example.com/8a1baa671439c...f111f6/foo.php

De todas formas se envía el número de sesión en el url pero de una forma más sútil.

Con el PHP y el apache se puede lograr esto utilizando el mod_rewrite de apache.

El mod_rewrite te permite analizar y modificar las peticiones al servidor web, transformándolas on the fly, cambiando servidores, rutas, recursos o variables. Eso ya depende de lo que querramos. En este caso queremos cambiar una ruta.

En el mismo directorio donde se encuentran nuestros programas php, crearemos un archivo llamado .htaccess

Este archivo contendrá reglas acerca de cómo transformar la solicitud y ponerla de una manera más usable.

Código:
RewriteRule ^([0-9A-Za-z]{32})/(.*)$ $2?idSession=$1 [QSA]
La primera parte le da una regla para que reescriba el url (rewriterule)
Luego, mediante expresiones regulares indica que encuentre la primera combinación de 32 letras y caracteres (variable 1) y todo lo que sigue (variable 2) y que la reescriba colocando primero la variable 2 y como parámetro la variable 1.

Sea (nuevamente) el siguiente url:

http://www.example.com/8a1baa671439c...f111f6/foo.php

El mod rewrite analiza la siguiente solicitud:

8a1baa671439cbbc56a613ebb4f111f6/foo.php

donde la variable 1 se establece como

8a1baa671439cbbc56a613ebb4f111f6

y la variable 2 como

/foo.php

Y rearma la solicitud como:

http://www.example.com//foo.php?idSe...a613ebb4f111f6

que ya es algo que conocemos.

Si todavía sigues aquí, debo aclararte que insertar la sesión en la ruta se realiza una sola vez, y que una vez insertada, ya se queda en todas las demás peticiones sin necesidad que tu alteres tus anclas o tus formularios post.

Para insertar el id de sesión en el url modificaremos ligeramente el paso 1.

Código PHP:
 $idSession md5uniqidrand() ) * microtime());
header'Location: http://www.example.com/' $idSession '/foo.php' ); 
Bueno. Esto es lo que puedo ayudarte en el breve tiempo que disponemos. Espero sea de utilidad.

Un abrazo.
Responder Con Cita