1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-24 07:12:18 +01:00
Files
archived-doc-tr/reference/session/sessionhandler.xml
2024-06-14 17:02:42 +01:00

258 lines
8.5 KiB
XML
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
<?xml version="1.0" encoding="utf-8"?>
<!-- EN-Revision: 62126c55f1c6ed444043e7272c4f9e233818a44b Maintainer: nilgun Status: ready -->
<reference xml:id="class.sessionhandler" role="class" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xi="http://www.w3.org/2001/XInclude">
<title>SessionHandler sınıfı</title>
<titleabbrev>SessionHandler</titleabbrev>
<partintro>
<!-- {{{ SessionHandler intro -->
<section xml:id="sessionhandler.intro">
&reftitle.intro;
<para>
<classname>SessionHandler</classname>, mevcut dahili PHP oturum kaydetme
işleyicisini kalıtım yoluyla oluşturmak için kullanılabilecek özel bir
sınıftır. Yedi dahili oturum kaydetme işleyicisi geriçağırımlarını
sarmalayan yedi yöntemi vardır (<parameter>open</parameter>,
<parameter>close</parameter>, <parameter>read</parameter>,
<parameter>write</parameter>, <parameter>destroy</parameter>,
<parameter>gc</parameter> ve <parameter>create_sid</parameter>).
Öntanımlı olarak, bu sınıf, genellikle öntanımlı değeri
<parameter>files</parameter> olan <link
linkend="ini.session.save-handler">session.save_handler</link> yapılandırma
yönergesi tarafından tanımlandığı gibi dahili kaydetme işleyicisine ne
atanmışsa onu sarmalar. Diğer dahili oturum kaydetme işleyicileri,
SQLite (<parameter>sqlite</parameter> olarak),
Memcache (<parameter>memcache</parameter> olarak) ve
Memcached (<parameter>memcached</parameter> olarak)
gibi PHP eklentileri tarafından sağlanır.
</para>
<para>
<classname>SessionHandler</classname> sınıfının düz bir örneği
<function>session_set_save_handler</function> kullanılarak kaydetme
işleyicisi olarak atandığında, geçerli kaydetme işleyicilerini sarmalar.
<classname>SessionHandler</classname> sınıfından genişletilen sınıf,
ebeveynin yöntemlerini geçersiz kılmanıza veya dahili PHP oturum
işleyicilerini sarmalayan ebeveyn sınıfın yöntemlerini çağırarak
genişletilen sınıfın yöntemlerini engellemenize veya filtrelemenize
olanak tanır.
</para>
<para>
Bu, örneğin, oturum verilerini şifrelemek/şifresini çözmek için
<parameter>read</parameter> ve <parameter>write</parameter> yöntemlerini
engellemenize ve ardından sonucu ebeveyn sınıfa ve ebeveyn sınıftan
iletmenize olanak tanır. Bundan başka, <parameter>gc</parameter> çöp
toplama geriçağırımı gibi bir yöntemi tamamen geçersiz kılmayı da
seçebilirsiniz.
</para>
<para>
<classname>SessionHandler</classname> mevcut dahili kaydetme işleyicisi
yöntemlerini sarmaladığından, yukarıdaki şifreleme örneği, işleyicilerin
iç yapısını bilmek zorunda kalmadan herhangi bir dahili kaydetme
işleyicisine uygulanabilir.
</para>
<para>
Bu sınıfı kullanmak için, önce <link
linkend="ini.session.save-handler">session.save_handler</link> ini
yönergesini kullanarak oluşturmak istediğiniz kaydetme işleyicisini atayın
ve ardından <classname>SessionHandler</classname> nesnesini veya işleyiciyi
<function>session_set_save_handler</function> işlevine genişleten bir
nesneyi aktarın.
</para>
<para>
Bu sınıfın geriçağırım yöntemlerinin PHP tarafından dahili olarak
çağrılmak üzere tasarlandığı, kullanıcı tarafından kod içinde kullanılmak
üzere tasarlanmadığı unutulmamalıdır. Dönüş değerleri PHP tarafından
dahili olarak işlenir. Oturum iş akışı hakkında daha fazla bilgi için
<function>session_set_save_handler</function> belgesine bakılabilir.
</para>
</section>
<!-- }}} -->
<section xml:id="sessionhandler.synopsis">
&reftitle.classsynopsis;
<!-- {{{ Synopsis -->
<classsynopsis class="class">
<ooclass>
<classname>SessionHandler</classname>
</ooclass>
<oointerface>
<modifier>implements</modifier>
<interfacename>SessionHandlerInterface</interfacename>
</oointerface>
<oointerface>
<interfacename>SessionIdInterface</interfacename>
</oointerface>
<classsynopsisinfo role="comment">&Methods;</classsynopsisinfo>
<xi:include xpointer="xmlns(db=http://docbook.org/ns/docbook) xpointer(id('class.sessionhandler')/db:refentry/db:refsect1[@role='description']/descendant::db:methodsynopsis[@role='SessionHandler'])">
<xi:fallback/>
</xi:include>
</classsynopsis>
<!-- }}} -->
</section>
<section xml:id="session.notes">
&reftitle.notes;
<warning>
<para>
Bu sınıf, mevcut dahili PHP oturum kaydetme işleyicisini oluşturmak
için tasarlanmıştır, eğer kendi özel kaydetme işleyicilerinizi yazmak
istiyorsanız, <classname>SessionHandler</classname> sınıfını genişletmek
yerine <classname>SessionHandlerInterface</classname> arayüzünü
gerçekleyin.
</para>
</warning>
</section>
<section xml:id="sessionhandler.examples">
&reftitle.examples;
<example>
<title>-
Dahili PHP oturum kaydetme işleyicilere şifreleme eklemek için
<classname>SessionHandler</classname> kullanımı
</title>
<programlisting role="php">
<![CDATA[
<?php
/**
* decrypt AES 256
*
* @param data $edata
* @param string $password
* @return decrypted data
*/
function decrypt($edata, $password) {
$data = base64_decode($edata);
$salt = substr($data, 0, 16);
$ct = substr($data, 16);
$rounds = 3; // anahtar uzunluğuna bağlı
$data00 = $password.$salt;
$hash = array();
$hash[0] = hash('sha256', $data00, true);
$result = $hash[0];
for ($i = 1; $i < $rounds; $i++) {
$hash[$i] = hash('sha256', $hash[$i - 1].$data00, true);
$result .= $hash[$i];
}
$key = substr($result, 0, 32);
$iv = substr($result, 32,16);
return openssl_decrypt($ct, 'AES-256-CBC', $key, true, $iv);
}
/**
* crypt AES 256
*
* @param data $data
* @param string $password
* @return base64 encrypted data
*/
function encrypt($data, $password) {
// random_bytes() kullanarak kriptografik olarak güvenli rastgele tuz üret
$tuz = random_bytes(16);
$salted = '';
$dx = '';
// key(32) ve iv(16) = 48 tuz
while (strlen($salted) < 48) {
$dx = hash('sha256', $dx.$password.$salt, true);
$salted .= $dx;
}
$key = substr($salted, 0, 32);
$iv = substr($salted, 32,16);
$encrypted_data = openssl_encrypt($data, 'AES-256-CBC', $key, true, $iv);
return base64_encode($salt . $encrypted_data);
}
class EncryptedSessionHandler extends SessionHandler
{
private $key;
public function __construct($key)
{
$this->key = $key;
}
public function read($id)
{
$data = parent::read($id);
if (!$data) {
return "";
} else {
return decrypt($data, $this->key);
}
}
public function write($id, $data)
{
$data = encrypt($data, $this->key);
return parent::write($id, $data);
}
}
// yerel 'files' işleyicisini alıkoyacağız, ancak PHP eklentileri tarafından
// sağlanan 'sqlite', 'memcache' veya 'memcached' gibi diğer dahili yerel
// işleyicilerle eşit şekilde çalışacak.
ini_set('session.save_handler', 'files');
$key = 'secret_string';
$handler = new EncryptedSessionHandler($key);
session_set_save_handler($handler, true);
session_start();
// $_SESSION'daki anahtarla değerleri atamaya ve almaya devam et
]]>
</programlisting>
</example>
<note>
<para>
Bu sınıfın yöntemleri, normal oturum iş akışının bir parçası olarak PHP
tarafından dahili olarak çağrılacak şekilde tasarlandığından, ebeveyn
yöntemlere (yani gerçek dahili yerel işleyiciler) yapılan çocuk sınıf
çağrıları, oturum gerçekten başlatılmadığı sürece (otomatik olarak veya
doğrudan <function>session_start</function> çağrısıyla) &false; döndürür.
Sınıf yöntemlerinin kodunuzun içinden çağrılabileceği birim denemelerini
"yaparken bunun dikkate alınması önemlidir.
</para>
</note>
</section>
</partintro>
&reference.session.entities.sessionhandler;
</reference>
<!-- 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
-->