2009-08-07 20 views
5

Estoy tratando de enviar el PHPSESSID a través de una variable HTTP GET para un cliente sin cookies.¿Cómo puedo enviar PHPSESSID en la URL?

He visto esto en varias implementaciones drupal donde ?PHPSESSIONID=123ABC se agrega a cada enlace, pero ¿cómo especifico esto en PHP y hay alguna forma de cambiar el parámetro GET para que sea? Token = 123ABC, o incluso enviado a través de HTTP POST?

Pila LAMP estándar, con el framework Zend.

Gracias!

+0

No debe poner la ID de sesión en variables GET, es un riesgo de seguridad. No hay un navegador relevante que no admita cookies. – stefanw

+2

stefanw - es específicamente para un cliente sin cookies, como se indica. – Sledge

Respuesta

7

El uso de una cookie o no está configurado por estas opciones de PHP:

Si el primero se establece, se utilizarán las cookies si es posible.
PHP debería detectar si las cookies están habilitadas o no, y usarlas solo si son compatibles con el cliente.


Para habilitar aprobación de la sesión de identificación por GET en lugar de las cookies, puede que tenga que activar session.use_trans_sid, que está desactivado por defecto (Lo que significa que, por defaut, ID de sesión sólo se pasa por las galletas - Nunca por GET).

Pero tenga en cuenta que, con esta opción activada, PHP pasará la identificación de la sesión por GET al menos para la primera página de cada usuario de su sitio ... ya que no tendrán la cookie al principio, y la única forma de verificar si admiten cookies es estableciendo una, e intentando leerla en la página siguiente.
Y los usuarios que no admite cookies, incluyendo los motores de búsqueda que probablemente diría, tendrá ese ID de sesión - y que no es agradable :-(


Y, también puede ser que desee tomar una mira session.name para establecer el nombre de la clave (juego de a "token" en lugar de "PHPSESSID", me refiero)


para más detalles, se puede echar un vistazo a la sección Session Handling del manual :-)

1

Puede cambiar PHPSESSID usando session_name() o session.name en su archivo php.ini (o usando ini_set()).

Para clientes sin cookies, existe la opción session.use_trans_sid php.ini; debe tener en cuenta que esto puede causar problemas, por ejemplo, usuarios que pasan URL con ID de sesión entre sí o motores de búsqueda que recogen dichas URL.

1

Haciéndolo m anualmente:

if ($_REQUEST['token']) 
    session_id($_REQUEST['token']); 
session_start(); 

print("foo=".$_SESSION['foo']++."<br />". 
     "<a href={$PHP_SELF}?token=".session_id().">link</a><br />"); 
print("<form method=POST>". 
     "<input type=hidden name=token value=".session_id()." />". 
     "<input type=submit /></form>"); 
0
  1. crear una página de inicio de sesión, el usuario debe iniciar sesión no sin ID y la contraseña correctos.
  2. Después de iniciar sesión, el usuario llega al hogar, aquí el usuario puede cerrar la sesión y volver a la página de inicio de sesión.
  3. El usuario no debe acceder a la página de inicio sin pasar por la página de inicio de sesión.
Cuestiones relacionadas