Pasar el identificador de sesión (session ID)

Existen dos métodos de propagación del identificador de sesión:

  • Cookies
  • Por URL

El módulo de sesión soporta ambos métodos. Las cookies son óptimas, pero como no son seguras (no todos los internautas las aceptan), no son fiables. El segundo método coloca el identificador de sesión directamente en las URL.

PHP es capaz de hacerlo de manera transparente. Si la opción de compilación session.use_trans_sid está activada, las URL relativas se modificarán para contener el identificador de sesión automáticamente.

Nota:

La opción arg_separator.output de php.ini permite personalizar el separador de argumentos. Para estar completamente de acuerdo con las especificaciones XHTML, especifique & aquí.

Alternativamente, se puede utilizar la constante SID que está definida si la sesión ha comenzado. Si el cliente no envía una cookie de sesión apropiada, tendrá la forma session_name=session_id. De lo contrario, valdrá una cadena vacía. Así, en todos los casos se puede incluir en la URL.

El siguiente ejemplo muestra cómo almacenar una variable y cómo realizar un enlace correcto a otra página, con SID.

Ejemplo #1 Contar el número de visitas de un usuario a una página

<?php

session_start
();

if (empty(
$_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
?>

<p>
Hola visitante, ha visto esta página <?php echo $_SESSION['count']; ?> veces.
</p>

<p>
Para continuar, <a href="nextpage.php?<?php echo htmlspecialchars(SID); ?>">haga clic aquí</a>.
</p>

La función htmlspecialchars() se utiliza al mostrar el SID con el fin de contrarrestar los ataques XSS.

La visualización del SID, como se muestra en el ejemplo anterior, no es necesaria si --enable-trans-sid se ha utilizado para compilar PHP.

Nota:

Las URL no relativas se consideran externas al sitio y no recibirán el SID, ya que la fuga del SID a un servidor diferente presenta un riesgo de seguridad importante.

add a note

User Contributed Notes 1 note

up
29
Anonymous
15 years ago
The first time a page is accessed, PHP doesn't yet know if the browser is accepting cookies or not, so after session_start() is called, SID will be non-empty, and the PHPSESSID gets inserted in all link URLs on that page that are properly using SID.

This has the consequence that if, for example, a search engine bot hits your home page first, all links that it sees on your home page will have the ugly PHPSESSID=... in them.

This appears to be the default behavior. A work-around is to turn on session.use_only_cookies, but then you lose session data for anyone who has their cookies turned off.
To Top