ConFoo: Call for paper is now Open

Pasar el ID de Sesión

Hay dos métodos para propagar un id de sesión:

  • Cookies
  • Parámetro de URL

El módulo de sesiones soporta ambos métodos. Las cookies son óptimas, pero ya que no están siempre disponibles, también se proporciona una manera alternativa. El segundo método embebe el id de sesión directamente en las URL.

PHP es capaz de transformar enlaces transparentemente. A menos que se use PHP 4.2.0 o posterior, se necesita habilitarlo manualmente cuando se construye PHP. Bajo Unix, pase --enable-trans-sid para la configuración. Si esta opción de construcción y la opción en tiempo de ejecución session.use_trans_sid están habilitadas, las URI relativas se modificarán para contener el id de sesión automáticamente.

Nota:

La directiva de php.ini arg_separator.output permite personalizar el separador de argumentos. Para una conformidad completa con XHTML, especifique & allí.

Alternativamente, se puede usar la constante SID, que está definida si la sesión se inició. Si el cliente no envía una cookie de sesión apropiada, tiene la forma session_name=session_id. De otro modo se desarrolla en una cadena vacía. Así, se puede embeberla incondicionalmente dentro de las URL.

El siguiente ejemplo muestra cómo registrar una variable, y cómo enlazar correctamente a otra página usando SID.

Ejemplo #1 Contar el número de peticiones de un sólo usuario

<?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 puede usar cuando se imprime SID para prevenir ataques relacionados con XSS.

Imprimir SID, como se mostró arriba, no es necesario si --enable-trans-sid se usó para compilar PHP.

Nota:

Se asume que las URL no relativas apuntan a sitios externos y por lo tanto no añaden SID, ya que sería un riesgo para la seguridad filtrar SID a un servidor diferente.

add a note add a note

User Contributed Notes 2 notes

up
5
Anonymous
4 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.
up
-12
a dot nielsen at shikadi dot net
5 years ago
When you generate URLs yourself using the SID variable, it must come first in the URL parameter list.  For example, if SID expands to "mysession=123" then this does NOT work:

  file.php?var1=value&mysession=123

The SID must come first:

  file.php?mysession=123&var1=value

If the SID does not come first then session_start() does not recognise it and it creates a new session instead of loading the old one.
To Top