mirror of
https://github.com/php/doc-tr.git
synced 2026-03-24 07:12:18 +01:00
258 lines
8.5 KiB
XML
258 lines
8.5 KiB
XML
<?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
|
||
-->
|