1
0
mirror of https://github.com/php/doc-es.git synced 2026-03-28 09:22:15 +01:00
Files
archived-doc-es/reference/session/examples.xml
2010-03-29 00:47:47 +00:00

270 lines
9.5 KiB
XML

<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision: 288721 $ -->
<!-- EN-Revision: 96c9d88bad9a7d7d44bfb7f26c226df7ee9ddf26 Maintainer: seros Status: ready -->
<appendix xml:id="session.examples" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
&reftitle.examples;
<section xml:id="session.examples.basic">
<note>
<para>
A partir de PHP 4.1.0, <varname>$_SESSION</varname> está disponible como una
variable global como <varname>$_POST</varname>,
<varname>$_GET</varname>, <varname>$_REQUEST</varname>, etc.
A diferencia de <varname>$HTTP_SESSION_VARS</varname>,
<varname>$_SESSION</varname> es siempre global. Por lo tanto, no se necesita
usar la palabra clave <link
linkend="language.variables.scope"><command>global</command></link>
para <varname>$_SESSION</varname>. Por favor, observe que esta
documentación ha sido modifiada para usar
<varname>$_SESSION</varname> en cualquier lugar. Puede sustituir
<varname>$HTTP_SESSION_VARS</varname> por
<varname>$_SESSION</varname>, si prefiere la antigua. Observe también
que se debe iniciar una sesión usando <function>session_start</function>
antes de que el uso de <varname>$_SESSION</varname> esté disponible.
</para>
<para>
Las claves en la matriz asociativa <varname>$_SESSION</varname>
están sujetas a las mismas limitaciones que los nombres
de las variables normales de PHP, esto es, no pueden
comenzar con un número y deben comenzar con una letra o guión de subrayado.
Para más detalles vea la sección sobre
<link linkend='language.variables'>variables</link> en este manual.
</para>
</note>
<para>
Si <link
linkend="ini.register-globals">register_globals</link>
está deshabilitado, sólo los miembros de la matriz asociativa global
<varname>$_SESSION</varname> pueden ser registrados como variables de
sesión. Las variables de sesión almacenadas sólo estarán disponibles
en la matriz <varname>$_SESSION</varname>.
</para>
<para>
Se recomienda el uso de <varname>$_SESSION</varname> (o
<varname>$HTTP_SESSION_VARS</varname> con PHP 4.0.6 o anterior)
para mejorar la seguridad y la legibilidad del código. Con
<varname>$_SESSION</varname> no hay necesidad de usar las funciones
<function>session_register</function>,
<function>session_unregister</function> o
<function>session_is_registered</function>. Las variables de sesión
son accesibles como cualquier otra variable.
<example>
<title>
Registrar una variable con <varname>$_SESSION</varname>.
</title>
<programlisting role="php">
<![CDATA[
<?php
session_start();
// Use $HTTP_SESSION_VARS con PHP 4.0.6 o anterior
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
]]>
</programlisting>
</example>
<example>
<title>
Dejar de registrar una variable con <varname>$_SESSION</varname> y
<link
linkend="ini.register-globals">register_globals</link> deshabilitado.
</title>
<programlisting role="php">
<![CDATA[
<?php
session_start();
// Use $HTTP_SESSION_VARS con PHP 4.0.6 o anterior
unset($_SESSION['count']);
?>
]]>
</programlisting>
</example>
</para>
<para>
<caution>
<para>
NO destruya completamente <varname>$_SESSION</varname> con
<literal>unset($_SESSION)</literal> ya que esto deshabilitará el
registro de las variables a través de la matriz superglobal
<varname>$_SESSION</varname>.
</para>
</caution>
</para>
<warning>
<para>
No se pueden usar referencias en variables de sesión ya que no hay una manera viable
de restarurar una referencia a otra variable.
</para>
</warning>
<para>
Si <link
linkend="ini.register-globals">register_globals</link>
está habilitado, cada variable global puede ser segistrada como variable de
sesión. Sobre una restauración de una sesión, estas variables serán restauradas
a las variables globales correspondientes. Ya que PHP debe conocer qué variables
globales están registradas como variables de sesión, los usuarios necesitan registrar
las variables con la función <function>session_register</function>.
Se puede evitar esto estableciendo simplemente entradas en
<varname>$_SESSION</varname>.
<caution>
<para>
Antes de PHP 4.3.0, si está usando <varname>$_SESSION</varname> y tiene
deshabilitado <link linkend="ini.register-globals">register_globals</link>,
no use <function>session_register</function>,
<function>session_is_registered</function> o
<function>session_unregister</function>.
Se recomienda deshabilitar <link
linkend="ini.register-globals">register_globals</link>
por razones de seguridad y rendimiento.
</para>
</caution>
</para>
<para>
Si <link
linkend="ini.register-globals">register_globals</link>
está habilitado, las variables globales y las entradas de
<varname>$_SESSION</varname> referenciarán automáticamente los
mismos valores que fueron registrados en la instancia de sesión anterior.
Sin embargo, si la variable es registrada mediante <varname>$_SESSION</varname>,
la variable global está disponible desde la siguiente petición.
</para>
<para>
Existe un defecto en PHP 4.2.3 y anteriores. Si se registra una nueva
variable de sesión usando <function>session_register</function>, la
entrada en el ámbito global y la entrada de <varname>$_SESSION</varname>
no referenciarán el mismo valor hasta el siguiente uso de
<function>session_start</function>. Esto es, una modificación en la
variable global registrada más recientemenet no será reflejada por la entrada de
<varname>$_SESSION</varname>. Esto ha sido corregido en PHP 4.3.0.
</para>
</section>
<section xml:id="session.idpassing">
<title>Pasar el ID de Sesión</title>
<para>
Hay dos métodos para propagar un id de sesión:
<itemizedlist>
<listitem>
<simpara>
Cookies
</simpara>
</listitem>
<listitem>
<simpara>
Parámetro de URL
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
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.
</para>
<para>
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 <link linkend="ini.session.use-trans-sid">
--enable-trans-sid</link> para la configuración. Si esta opción de
construcción y la opción en tiempo de ejecución
<literal>session.use_trans_sid</literal> están habilitadas, las URI relativas
se modificarán para contener el id de sesión automáticamente.
<note>
<para>
La directiva de &php.ini; <link linkend="ini.arg-separator.output">arg_separator.output</link>
permite personalizar el separador de argumentos. Para una conformidad completa con
XHTML, especifique &amp;amp; allí.
</para>
</note>
</para>
<para>
Alternativamente, se puede usar la constante <constant>SID</constant>, que está
definida si la sesión se inició. Si el cliente no envía una cookie de sesión
apropiada, tiene la forma <literal>session_name=session_id</literal>.
De otro modo se desarrolla en una cadena vacía. Así, se puede embeberla
incondicionalmente dentro de las URL.
</para>
<para>
El siguiente ejemplo muestra cómo registrar una variable, y
cómo enlazar correctamente a otra página usando <constant>SID</constant>.
<example>
<title>Contar el número de peticiones de un sólo usuario</title>
<programlisting role="php">
<![CDATA[
<?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>
]]>
</programlisting>
</example>
</para>
<para>
La función <function>htmlspecialchars</function> se puede usar cuando se imprime
<constant>SID</constant> para prevenir ataques relacionados con XSS.
</para>
<para>
Imprimir <constant>SID</constant>, como se mostró arriba, no es necesario si
<link linkend="ini.session.use-trans-sid">
--enable-trans-sid</link> se usó para compilar PHP.
</para>
<note>
<para>
Se asume que las URL no relativas apuntan a sitios externos y
por lo tanto no añaden <constant>SID</constant>, ya que sería un riesgo para la seguridad
filtrar <constant>SID</constant> a un servidor diferente.
</para>
</note>
</section>
<section xml:id="session.customhandler">
<title>Gestores de Sesión Personalizados</title>
<para>
Para implementar el almacenamiento en bases de datos, o cualquier otro método de almacenamiento,
se necesita usar <function>session_set_save_handler</function> para
crear un conjunto de funciones de almacenamiento a nivel de ususario.
</para>
</section>
</appendix>
<!-- Keep this comment at the end of the file
Local variables:
mode: sgml
sgml-omittag:t
sgml-shorttag:t
sgml-minimize-attributes:nil
sgml-always-quote-attributes:t
sgml-indent-step:1
sgml-indent-data:t
indent-tabs-mode:nil
sgml-parent-document:nil
sgml-default-dtd-file:"~/.phpdoc/manual.ced"
sgml-exposed-tags:nil
sgml-local-catalogs:nil
sgml-local-ecat-files:nil
End:
vim600: syn=xml fen fdm=syntax fdl=2 si
vim: et tw=78 syn=sgml
vi: ts=1 sw=1
-->