-
Notifications
You must be signed in to change notification settings - Fork 24
/
session-regenerate-id.xml
217 lines (194 loc) · 6.94 KB
/
session-regenerate-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
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: a0ae28d3bc85f927c22649ebd9a590b921534b7d Maintainer: nilgun Status: ready -->
<refentry xmlns="http://docbook.org/ns/docbook" xml:id="function.session-regenerate-id">
<refnamediv>
<refname>session_regenerate_id</refname>
<refpurpose>Geçerli oturum kimliğini yenisiyle değiştirir
</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>session_regenerate_id</methodname>
<methodparam choice="opt"><type>bool</type><parameter>eski_oturumu_sil</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<para>
<function>session_regenerate_id</function> işlevi geçerli oturum kimliğini
yenisiyle değiştirirken oturum bigisini korur.
</para>
<para>
<link linkend="ini.session.use-trans-sid">session.use_trans_sid</link>
etkin olduğunda, çıktı <function>session_regenerate_id</function>
çağrısından sonra başlatılmalıdır. Aksi takdirde, eski oturum kimliği
kullanılır.
</para>
<warning>
<para>
Şu an için, işlev Mobil veya WiFi ağları gibi dengesiz ağlarda düzgün
çalışmamaktadır. Bu bakımdan, işlev böyle ağlarda çağrıldığında bir oturum
kaybı yaşanabilir.
</para>
<para>
Eski oturum verisini değil, eski oturumun zaman damgasını hemen yok etmeli
ve eski oturum kimliğine erişimi denetlemelisiniz. Aksi takdirde, sayfaya
eşzamanlı erişimler tutarsız bir duruma veya oturum kaybına yol açabilir.
Ya da, istemcinin (tarayıcı) yarış durumu yan etkisi nedeniyle, gereksiz
yere çok sayıda boş oturum kimliği çerezi oluşturmasına sebep olabilir.
Eski oturum verisinin hemen silinmesi ayrıca oturum ele geçirme saldırısını
algılamayı ve önlemeyi devre dışı bırakır.
</para>
</warning>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<variablelist>
<varlistentry>
<term><parameter>eski_oturumu_sil</parameter></term>
<listitem>
<para>
&true; ise eski oturum verisi silinir. Yarış durumlarından kaçınmak
ve oturum ele geçirme saldırılarını algılamak/önlemek için
<emphasis>eski oturum hemen silinmemelidir</emphasis>.
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
&return.success;
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
<example>
<title>- <function>session_regenerate_id</function> örneği</title>
<programlisting role="php">
<![CDATA[
<?php
// Dikkat: Bu kod tamamen çalışır durumda değildir, sadece bir örnektir!
session_start();
// Zaman damgası yok edilmiş mi?
if (isset($_SESSION['destroyed'])
&& $_SESSION['destroyed'] < time() - 300) {
// Normalde olmamalı. Saldırı veya kararsız ağ nedeniyle olabilir.
// Bu kullanıcı oturumunun tüm kimlik kanıtlama bilgilerini sil.
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
throw(new DestroyedSessionAccessException);
}
$old_sessionid = session_id();
// Silinme zamanı damgasını tanımla
$_SESSION['destroyed'] = time();
// session_regenerate_id() eski oturum verisini kaydeder
// session_regenerate_id() basitçe çağrılırsa oturum kaybı oluşabilir, vs.
// Sonraki örneğe bakın
session_regenerate_id();
// Yeni oturumun silinme zamanı damgasına ihtiyacı yok
unset($_SESSION['destroyed']);
$new_sessionid = session_id();
echo "Eski oturum: $old_sessionid<br />";
echo "Yeni oturum: $new_sessionid<br />";
print_r($_SESSION);
?>
]]>
</programlisting>
</example>
</para>
<para>
Geçerli oturum modülü tutarsız ağda iyi çalışmaz. İşlevin oturumu
kaybetmesinden kaçınmak için oturum kimliği yönetilmelidir.
</para>
<para>
<example>
<title>- <function>session_regenerate_id</function> ile oturum kaybını önlemek</title>
<programlisting role="php">
<![CDATA[
<?php
// Dikkat: Bu kod tamamen çalışır durumda değildir, sadece bir örnektir!
// my_session_start() ve my_session_regenerate_id() tutarsız ağda
// oturum kaybını önler. Ek olarak bu kod, çalınan oturumun saldırganlar
// tarafından suistimal edilmesini engelleyebilir.
function my_session_start() {
session_start();
if (isset($_SESSION['destroyed'])) {
if ($_SESSION['destroyed'] < time()-300) {
// Normalde olmamalı. Saldırı veya kararsız ağ nedeniyle olabilir.
// Bu kullanıcı oturumunun tüm kimlik kanıtlama bilgilerini sil.
remove_all_authentication_flag_from_active_sessions($_SESSION['userid']);
throw(new DestroyedSessionAccessException);
}
if (isset($_SESSION['new_session_id'])) {
// Süre henüz dolmadı. Kararsız ağda çerez kaybı olabilirdi.
// Uygun oturum kimliği çerezini yeniden tanımlamayı dene.
// Dikkat: Kimlik kanıtlama bilgilerini silmek için
// oturum kimliğini yeniden atamaya çalışma!
session_commit();
session_id($_SESSION['new_session_id']);
// Yeni oturum kimliği etkinleşmeli
session_start();
return;
}
}
}
function my_session_regenerate_id() {
// Tutarsız ağdan dolayı oturum kimliği atanamadığında
// doğru oturum kimliğini tanımlamak için yeni oturum kimliği gerekir.
$new_session_id = session_create_id();
$_SESSION['new_session_id'] = $new_session_id;
// Silinme zamanı damgasını tanımla
$_SESSION['destroyed'] = time();
// geçerli oturuma yaz ve kapat;
session_commit();
// Oturumu yeni oturum kimliği ile başlat
session_id($new_session_id);
ini_set('session.use_strict_mode', 0);
session_start();
ini_set('session.use_strict_mode', 1);
// Yeni oturumun bunlara ihtiyacı yok
unset($_SESSION['destroyed']);
unset($_SESSION['new_session_id']);
}
?>
]]>
</programlisting>
</example>
</para>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>session_id</function></member>
<member><function>session_create_id</function></member>
<member><function>session_start</function></member>
<member><function>session_destroy</function></member>
<member><function>session_reset</function></member>
<member><function>session_name</function></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
-->