-
Notifications
You must be signed in to change notification settings - Fork 24
/
examples.xml
279 lines (271 loc) · 10.5 KB
/
examples.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
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 184f3f7bd45643cb80f828d0bb001991ec3a5fad Maintainer: nilgun 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">
<title>Temel Kullanım</title>
<para>
Oturumlar, bireysel kullanıcılar için verileri benzersiz bir oturum
kimliğine göre depolamanın basit bir yoludur. Bu, sayfa istekleri arasında
durum bilgisini sürdürmek için kullanılabilir. Oturum kimlikleri normalde
tarayıcıya oturum çerezleri aracılığıyla gönderilir ve kimlik, mevcut
oturum verilerini almak için kullanılır. Oturum kimliği veya çerezlerinin
olmaması, PHP'nin yeni bir oturum oluşturmasını ve yeni bir oturum kimliği
üretmesini sağlar.
</para>
<para>
Oturumlar basit bir iş akışını takip eder. Bir oturum başlatıldığında,
PHP ya aktarılan kimliği (genellikle bir oturum çerezinden) kullanarak
var olan bir oturumu geri alır ya da hiçbir oturum aktarılmamışsa yeni
bir oturum oluşturur. PHP, <varname>$_SESSION</varname> süper küreselini,
oturum başladıktan sonra oturum verileriyle doldurur. PHP kapandığında,
<varname>$_SESSION</varname> süperküresel içeriğini otomatik olarak alacak,
dizileştirecek ve oturum kaydetme işleyicisini kullanarak depolanmaya
gönderecektir.
</para>
<para>
Öntanımlı olarak PHP, <link
linkend="ini.session.save-handler">session.save_handler</link> tarafından
atanan dahili dosya kaydetme işleyicisini kullanır. Bu, oturum verilerini
<link linkend="ini.session.save-path">session.save_path</link> yapılandırma
yönergesi tarafından belirtilen konumda sunucuya kaydeder.
</para>
<para>
Oturumlar, <function>session_start</function> işlevi kullanılarak
elle başlatılabilir. <link
linkend="ini.session.auto-start">session.auto_start</link> yönergesine
<parameter>1</parameter> atanmışsa, istek başlatıldığında oturum
otomatik olarak başlayacaktır.
</para>
<para>
Oturumlar normalde PHP bir komut dosyasını yürütmeyi bitirdiğinde otomatik
olarak kapanır, ancak <function>session_write_close</function> işlevi
kullanılarak elle de kapatılabilir.
<example>
<title>-
Bir değişkeni <varname>$_SESSION</varname> ile kayıt altına almak
</title>
<programlisting role="php">
<![CDATA[
<?php
session_start();
if (!isset($_SESSION['count'])) {
$_SESSION['count'] = 0;
} else {
$_SESSION['count']++;
}
?>
]]>
</programlisting>
</example>
<example>
<title>- <varname>$_SESSION</varname> ile bir değişkeni tanımsız yapmak
</title>
<programlisting role="php">
<![CDATA[
<?php
session_start();
unset($_SESSION['count']);
?>
]]>
</programlisting>
</example>
</para>
<para>
<caution>
<para>
<varname>$_SESSION</varname> dizisinin tamamını
<literal>unset($_SESSION)</literal> ile tanımsız YAPMAYIN. Bu işlem,
oturum değişkenlerinin <varname>$_SESSION</varname> süper küreseli
üzerinden kayıt altına alınmamasına sebep olacaktır.
</para>
</caution>
</para>
<warning>
<para>
Başka bir değişkene gönderimi tekrar tanımlı kılmanın bir yolu
olmadığından oturum değişkenlerinde gönderimleri kullanamazsınız.
</para>
</warning>
<note>
<para>
Dosya tabanlı oturumlar (PHP'de öntanımlı) bir oturum bir kez
<function>session_start</function> veya dolaylı olarak <link
linkend="ini.session.auto-start">session.auto_start</link> aracılığıyla
açıldığında oturum dosyasını kilitler. Bir kez kilitlendiğinde, başka
hiçbir betik, <function>session_write_close</function> çağrılana kadar
veya ilk betik sonlanana kadar aynı oturum dosyasına erişemez.
</para>
<para>
Bu, AJAX'ı yoğun şekilde kullanan ve aynı anda birden çok istek alan http
sitelerinde büyük olasılıkla bir sorundur. Bununla başa çıkmanın en kolay
yolu, oturumda gerekli herhangi bir değişiklik yapılır yapılmaz, tercihen
betiğin başlarında, <function>session_write_close</function> işlevini
çağırmaktır. Bunun yerine, eşzamanlılığı destekleyen farklı bir oturum
artucu da kullanılabilir.
</para>
</note>
</section>
<section xml:id="session.idpassing">
<title>Oturum Kimliğinin Aktarımı</title>
<para>
Bir oturum kimliğini yaymanın iki yolu vardır:
<itemizedlist>
<listitem>
<simpara>
Çerezler
</simpara>
</listitem>
<listitem>
<simpara>
URL bağımsız değişkeni
</simpara>
</listitem>
</itemizedlist>
</para>
<para>
Oturum modülü her ikisini de destekler. Çerezler en uygunudur, fakat her
zaman kullanmak mümkün olmadığından ikinci bir yöntem sağlıyoruz. İkinci
yöntem, oturum kimliğini doğrudan URL'nin içine gömer.
</para>
<para>
PHP bağlantıları şeffaf olarak dönüştürme yeteneğine sahiptir. Çalışma
anında <literal>session.use_trans_sid</literal> yönergesi etkin kılınmışsa,
göreli URI'ler otomatik olarak oturum kimliğini içerecek şekilde
değiştirilir.
<note>
<para>
<link linkend="ini.arg-separator.output">arg_separator.output</link>
&php.ini; yönergesi bağımsız değişken ayracının değiştirilebilmesini sağlar. Tam
XHTML uyumluluğu için yönergeye değer olarak &amp; belirtin.
</para>
</note>
</para>
<para>
Ayrıca, oturum başlatıldığında tanımlanan <constant>SID</constant> sabitini
de kullanabilirsiniz. Eğer istemci uygun bir oturum çerezi göndermezse,
<constant>SID</constant> sabiti
<replaceable>oturum_ismi=oturum_kimliği</replaceable> değerini içerecektir.
Aksi takdirde sabitin değeri bir boş dizge olur. Bu durumda, oturum
kimliğini koşulsuz olarak URL'lerin içine gömebilirsiniz.
</para>
<para>
Aşağıdaki örnekte bir değişkenin nasıl oturum değişkeni haline getirildiği
ve <constant>SID</constant> sabitiyle başka bir sayfaya nasıl bağlantı
kurulduğu gösterilmiştir.
<example>
<title>- Tek bir kullanıcının sayfa erişimlerinin sayılması</title>
<programlisting role="php">
<![CDATA[
<?php
session_start();
if (empty($_SESSION['count'])) {
$_SESSION['count'] = 1;
} else {
$_SESSION['count']++;
}
?>
<p>
Merhaba sayın ziyaretçi, bu sayfayı <?php echo $_SESSION['count']; ?>
kere ziyaret ettiniz.
</p>
<p>
Devam etmek için, <a href="nextpage.php?<?php echo htmlspecialchars(SID);
?>">buraya tıklayınız</a>.
</p>
]]>
</programlisting>
</example>
</para>
<para>
XSS saldırılarından kaçınmak için URL'ye <constant>SID</constant>
yerleştirilirken <function>htmlspecialchars</function> kullanılabilir.
</para>
<para>
<constant>SID</constant> sabitini URL'ye yukarıdaki gibi
yerleştirecekseniz, PHP'yi <link linkend="ini.session.use-trans-sid">
--enable-trans-sid</link> seçeneğiyle derlemeniz gerekmez.
</para>
<note>
<para>
Göreli olmayan URL'lerin harici siteleri işaret ettikleri varsayılır ve
oturum kimliğinin başka bir sunucuya ifşa edilme riskine karşı
<constant>SID</constant> bunlara yerleştirilmez.
</para>
</note>
</section>
<section xml:id="session.customhandler">
<title>Özel Oturum Eylemcisi</title>
<para>
Veritabanlarını saklama alanı olarak kullanmak için veya başka bir saklama
yöntemi kullanmak için <function>session_set_save_handler</function>
işleviyle kullanıcı seviyesinde bir saklama işlevleri kümesi tanımlamak
gerekir.
<classname>SessionHandlerInterface</classname> arayüzü kullanılarak oturum
işleyicileri oluşturabilir veya <classname>SessionHandler</classname>
sınıfı miras alınarak PHP'nin dahili işleyicileri genişletetilebilir.
</para>
<para>
<function>session_set_save_handler</function> içinde belirtilen geri
çağırımlar, bir oturumun yaşam döngüsü boyunca PHP tarafından çağrılan
yöntemlerdir: <parameter>open</parameter>, <parameter>read</parameter>,
<parameter>write</parameter> ve <parameter>close</parameter>. Temizlik
görevlerinde, bir oturumu silmek için <parameter>destroy</parameter>
ve düzenli olarak çöpleri toplamak için <parameter>gc</parameter>.
</para>
<para>
Bu nedenle, PHP'ye oturum kaydetme işleyicileri daima gereklidir.
Öntanımlı işleyici, genellikle dahili dosyaları kaydetme işleyicisidir.
Özel bir kaydetme işleyicisi, <function>session_set_save_handler</function>
kullanılarak atanabilir. Bunun yanında, dahili kaydetme işleyicileri
<parameter>sqlite</parameter>, <parameter>memcache</parameter> ve
<parameter>memcached</parameter> gibi PHP eklentileri tarafından da sağlanır
ve <link linkend="ini.session.save-handler">session.save_handler</link> ile
atanabilir.
</para>
<para>
Oturum başladığında, PHP dahili olarak oturum açma işleyicisini, ardından da
depolamaya olduğu gibi aktarılmak üzere kodlanmış bir dizge döndüren okuma
geriçağrım işlevini çağırır. Okuma geriçağırım işlevi kodlanmış dizgeyi
döndürdüğünde, PHP dizgeyi çözer ve ortaya çıkan diziyi
<varname>$_SESSION</varname> süper küreseline aktarır.
</para>
<para>
PHP kapandığında (veya <function>session_write_close</function>
çağrıldığında), PHP dahili olarak <varname>$_SESSION</varname> süper
küreselini kodlayacak ve bunu oturum kimliği ile birlikte yazma
geriçağrımına iletecektir. Yazma geriçağırımı bittikten sonra, PHP dahili
olarak kapatma geriçağırım işleyicisini çağırır.
</para>
<para>
Bir oturum özellikle yok edildiğinde, PHP oturum kimliğini aktararak
yoketme işleyicisini çağırır.
</para>
<para>
PHP, bir oturumun belirlenen azami yaşam süresine göre herhangi bir oturum
kaydını sona erdirmek için zaman zaman çöp toplama geriçağrımı yapar. Bu
işlev, kalıcı depolamada, belirlenen yaşam süresinden daha uzun süre
erişilen tüm kayıtları siler.
</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
-->