-
Notifications
You must be signed in to change notification settings - Fork 50
/
session-create-id.xml
155 lines (145 loc) · 4.95 KB
/
session-create-id.xml
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
<?xml version="1.0" encoding="utf-8"?>
<!-- $Revision$ -->
<!-- EN-Revision: a9ada9d6f9b5504aca3815eed58aa5d499e03eab Maintainer: seros Status: ready -->
<!-- Reviewed: no Maintainer: andresdzphp -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.session-create-id">
<refnamediv>
<refname>session_create_id</refname>
<refpurpose>Crear un nuevo ID de sesión</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>string</type><methodname>session_create_id</methodname>
<methodparam choice="opt"><type>string</type><parameter>prefix</parameter></methodparam>
</methodsynopsis>
<para>
<function>session_create_id</function> se emplea para crear nuevos
ID de sesión para la sesión actual. Devuelve los ID de sesión
libres de colisiones.
</para>
<para>
Si la sesión no está activa, la comprobación de colisiones se omite.
</para>
<para>
El ID de sesión se crea de acuerdo a los ajustes de php.ini.
</para>
<para>
Es importante utilizar el mismo ID de usuario del servidor web para las tareas
de recolección de basura. De lo contrario, se podrían tener problemas de permisos
especialmente con manejadores de guardado de ficheros.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>prefix</parameter></term>
<listitem>
<para>
Si se especifica <parameter>prefix</parameter>, el nuevo ID de sesión
se prefijará con <parameter>prefix</parameter>. No todos los
caracteres están permitidos con el ID de sesión. Están permitidos
los caracteres del rango <literal>a-z A-Z 0-9 , (coma) y -
(menos)</literal>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
<function>session_create_id</function> devuelve el nuevo ID de sesión libre
de colisiones para la sesión actual. Si se emplea sin una sesión
activa, se omite la comprobación de colisiones.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>Ejemplo de <function>session_create_id</function> con <function>session_regenerate_id</function></title>
<programlisting role="php">
<![CDATA[
<?php
// Mi función de inicio de sesión admite la gestión de marcas de tiempo
function mi_inicio_de_sesión() {
session_start();
// No permitir usar un ID de sesión demasiado antiguo
if (!empty($_SESSION['deleted_time']) && $_SESSION['deleted_time'] < time() - 180) {
session_destroy();
session_start();
}
}
// Mi función de regeneración de ID de sesión
function mi_regeneración_de_id_de_sesión() {
// Llamar a session_create_id() mientras la sesión está activa para
// asegurarse de que no haya colisiones.
if (session_status() != PHP_SESSION_ACTIVE) {
session_start();
}
// ADVERTENCIA: ¡No utilizar nunca cadenas confidenciales para el prefijo!
$nuevo_id = session_create_id('miprefijo-');
// Establecer la marca de tiempo de borrado. Los datos de la sesión no deben eliminarse inmediatamente.
$_SESSION['deleted_time'] = time();
// Finalizar la sesión
session_commit();
// Asegurarse de aceptar ID de sesiones definidas por el usuario
// NOTA: Se debe habilitar 'use_strict_mode' para operaciones normales.
ini_set('session.use_strict_mode', 0);
// Establecer el nuevo ID de sesión personalizado
session_id($nuevo_id);
// Empezar la sesión con el ID de sesión personalizado
session_start();
}
// Asegurarse de que 'use_strict_mode' está habilitado.
// 'use_strict_mode' es obligatorio por razones de seguridad.
ini_set('session.use_strict_mode', 1);
mi_inicio_de_sesión();
// EL ID de sesión debe regenerarse cuando
// - El usuario inicia la sesión
// - El usuario cierra la sesión
// - Ha transcurrido un cierto perido de tiempo
mi_regeneración_de_id_de_sesión();
// Escribir código útil
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>session_regenerate_id</function></member>
<member><function>session_start</function></member>
<member><link linkend="ini.session.use-strict-mode">session.use_strict_mode</link></member>
<member><methodname>SessionHandler::create_sid</methodname></member>
</simplelist>
</para>
</refsect1>
</refentry>
<!-- 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
-->