Pasar el identificador de sesión (session ID)
Existen dos métodos de propagación del identificador de sesión:
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.