-
Notifications
You must be signed in to change notification settings - Fork 76
/
Copy pathsession-create-id.xml
168 lines (150 loc) · 7.19 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
156
157
158
159
160
161
162
163
164
165
166
167
168
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: f5c124befdf7c2791877694a86ead123b179d935 Maintainer: rjhdby Status: ready -->
<!-- Reviewed: no -->
<refentry xml:id="function.session-create-id" xmlns="http://docbook.org/ns/docbook">
<refnamediv>
<refname>session_create_id</refname>
<refpurpose>Создаёт новый идентификатор сессии</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type class="union"><type>string</type><type>false</type></type><methodname>session_create_id</methodname>
<methodparam choice="opt"><type>string</type><parameter>prefix</parameter><initializer>""</initializer></methodparam>
</methodsynopsis>
<para>
Функция <function>session_create_id</function> создаёт новый идентификатор текущей сессии.
Функция возвращает идентификатор сессии без коллизий.
</para>
<para>
При неактивной сессии проверка на коллизии опускается.
</para>
<para>
Функция создаёт идентификатор сессии, который соответствует настройкам файла конфигурации php.ini.
</para>
<para>
Скрипт, который содержит задание по сборке мусора, требуется запускать с тем же идентификатором пользователя,
от имени которого запускается процесс веб-сервера. Несовпадение идентификаторов
вызывает проблемы с разрешениями, которые острее остальных проявляются при работе дескриптора сохранения файлов.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>prefix</parameter></term>
<listitem>
<para>
Функция добавит префикс <parameter>prefix</parameter> в начало
нового идентификатора сессии, если параметр <parameter>prefix</parameter> указали.
Не каждый символ разрешается указывать в идентификаторе сессии.
В идентификаторе сессии допускаются только символы из диапазона: <literal>[a-zA-Z0-9,-]</literal>.
Максимальная длина идентификатора — 256 символов.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Функция <function>session_create_id</function> возвращает новый идентификатор текущей сессии
без коллизий. Функция не проверяет идентификатор на коллизии
при неактивной сессии.
Функция возвращает &false;, если возникла ошибка.
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>
Пример использования функции <function>session_create_id</function>
с функцией <function>session_regenerate_id</function>
</title>
<programlisting role="php">
<![CDATA[
<?php
// Функция запуска сессии с поддержкой управления сессиями на основе временны́х меток
function my_session_start()
{
session_start();
// Не разрешать слишком старый идентификатор сессии
if (!empty($_SESSION['deleted_time']) && $_SESSION['deleted_time'] < time() - 180) {
session_destroy();
session_start();
}
}
// Функция обновления идентификатора сессии
function my_session_regenerate_id()
{
// Вызываем функцию session_create_id(), пока сессия активна, чтобы гарантировать,
// что не возникнет коллизий
if (session_status() !== PHP_SESSION_ACTIVE) {
session_start();
}
// ВНИМАНИЕ: Никогда не указывайте как префикс конфиденциальные строки!
$newid = session_create_id('myprefix-');
// Устанавливаем временну́ю метку удаления данных текущей сессии.
// По ряду причин данные активной сессии не нужно удалять сразу
$_SESSION['deleted_time'] = time();
// Записываем данные сессии и завершаем её
session_write_close();
// Убедимся, что PHP принимает пользовательский идентификатор сессии
// ЗАМЕЧАНИЕ: Разработчики PHP рекомендуют включать опцию use_strict_mode, чтобы защитить приложение от уязвимостей
ini_set('session.use_strict_mode', 0);
// Устанавливаем новый пользовательский идентификатор сессии
session_id($newid);
// Запускаем сессию с пользовательским идентификатором
session_start();
}
// Убеждаемся, что включили строгий режим сессий, который устанавливает опция use_strict_mode.
// Опция use_strict_mode обязательна по соображениям безопасности
ini_set('session.use_strict_mode', 1);
my_session_start();
// Идентификатор сессии требуется генерировать, когда:
// - Пользователь вошёл в систему
// - Пользователь вышел из системы
// - По прошествии конкретного периода времени
my_session_regenerate_id();
// С этого места пишем полезный код программы
?>
]]>
</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
-->