2009-03-05 18 views
18

He intentado investigar este mecanismo, pero solo encuentro consejos y estos no son muy consistentes. ¿Cómo se envía la sesión _id al navegador y cómo se le ordena al navegador que la devuelva cuando el usuario solicite una nueva página?¿Cómo funcionan las sesiones de PHP cuando las cookies están deshabilitadas?

Gracias, Chris

+0

Consulte también [¿Es correcto mi entendimiento de las sesiones de PHP?] (Http://stackoverflow.com/questions/523703/is-my-understanding-of-php-sessions-correct) – Gumbo

Respuesta

28

PHP va a hacer 2 cosas:

  • Se volverá a escribir todos los enlaces para pasar un parámetro GET adicional, por lo general PHPSESSID pero esto se puede cambiar mediante el establecimiento de session.name en php. ini
  • Agregará una entrada oculta con el mismo nombre después de todas las etiquetas de apertura <form>.

Tenga en cuenta que esto es algo peligroso de hacer, porque cualquier persona que usted, p. copiar/pegar una URL que contenga un parámetro PHPSESSID podrá compartir su sesión de inicio de sesión en el sitio; el servidor web no tiene manera fácil de decirle que usted es diferente de la persona a la que envió el enlace ...

+2

Gracias. Eso es justo lo que quería saber. Parece irónico que las cookies puedan desactivarse para aumentar la seguridad en el cliente, pero esta acción reducirá la seguridad en el servidor. – cjakeman

0

PHP's el propio módulo de sesión admite recuperar la identificación de sesión de los datos GET y POST (además de las cookies). Puede usar http://uk.php.net/manual/en/session.configuration.php#ini.session.use-trans-sid y http://uk.php.net/manual/en/session.configuration.php#ini.url-rewriter.tags para dejar que php maneje el reenvío de la identificación. Pero, en cualquier caso, tenga en cuenta que, especialmente si utiliza GET para transportar el ID, es más probable que algunos de sus usuarios regalen su id. De sesión (válida) por accidente.

Al mecanismo subyacente no le importa cómo se transportó la identificación de la sesión del cliente al servidor. Siempre que pase el valor "correcto" a session_id() funcionará, incluso si hace algo tan raro (¿estúpido?) Como abusar del encabezado etag como vehículo para la identificación de la sesión ;-)

0

Sesiones trabajo creando un id. único (UID) para cada visitante y variables de tienda basadas en este UID. El UID es (1) almacenado en una cookie o (2) se propaga en la URL.

Cuestiones relacionadas