mirror of
https://github.com/php/doc-es.git
synced 2026-03-28 09:22:15 +01:00
git-svn-id: https://svn.php.net/repository/phpdoc/es/trunk@297032 c90b9560-bf6c-de11-be94-00142212c4b1
270 lines
9.5 KiB
XML
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; 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
|
|
-->
|
|
|