1
0
mirror of https://github.com/php/doc-tr.git synced 2026-03-24 15:22:23 +01:00
Files
2024-09-05 17:21:38 +03:00

441 lines
16 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: 1ad4e2d550953000e2441b663226300596962ef2 Maintainer: nilgun Status: ready -->
<refentry xml:id="function.setcookie" xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink">
<refnamediv>
<refname>setcookie</refname>
<refpurpose>Bir çerez gönderir</refpurpose>
</refnamediv>
<refsect1 role="description">
&reftitle.description;
<methodsynopsis>
<type>bool</type><methodname>setcookie</methodname>
<methodparam><type>string</type><parameter>isim</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>değer</parameter><initializer>""</initializer></methodparam>
<methodparam choice="opt"><type>int</type><parameter>süreler_veya_seçenekler</parameter><initializer>0</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>yol</parameter><initializer>""</initializer></methodparam>
<methodparam choice="opt"><type>string</type><parameter>alan</parameter><initializer>""</initializer></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>güvenli</parameter><initializer>&false;</initializer></methodparam>
<methodparam choice="opt"><type>bool</type><parameter>sadece_http</parameter><initializer>&false;</initializer></methodparam>
</methodsynopsis>
<para>
PHP 7.3.0 ve sonrasında böyle de kullanılabilir
(isimli bağımsız değişkenler desteklenmiyor):
</para>
<methodsynopsis>
<type>bool</type><methodname>setcookie</methodname>
<methodparam><type>string</type><parameter>isim</parameter></methodparam>
<methodparam choice="opt"><type>string</type><parameter>değer</parameter><initializer>""</initializer></methodparam>
<methodparam choice="opt"><type>array</type><parameter>seçenekler</parameter><initializer>[]</initializer></methodparam>
</methodsynopsis>
<para>
<function>setcookie</function> işlevi, HTTP başlıklarının kalanıyla
gönderilmek üzere bir çerez tanımlar. Diğer başlıklar gibi, çerezlerde
betiğinizin herhangi bir çıktısından <emphasis>önce</emphasis>
gönderilmelidir (bu bir protokol kısıtlamasıdır). Bu kısıtlama, bu işleve
yapılacak çağrıların, <literal>&lt;html&gt;</literal> ve
<literal>&lt;head&gt;</literal> etiketleri ve hatta her türlü boşluk
karakteri çıktısından bile önce yer almasını gerektirir.
</para>
<para>
Çerezler bir kere atandı mı, artık <varname>$_COOKIE</varname> dizisi ile
sonraki sayfa yüklemesinde erişilebilir olacaktır. Çerez
değerleri ayrıca, <varname>$_REQUEST</varname> içinde de mevcut olabilir.
</para>
</refsect1>
<refsect1 role="parameters">
&reftitle.parameters;
<para>
<function>setcookie</function> bağımsız değişkenlerinin her birinin nasıl
çalıştığını hakkında bilgi edinmek için bkz:
<link xlink:href="&url.rfc;6265">RFC 6265</link>
<variablelist>
<varlistentry>
<term><parameter>isim</parameter></term>
<listitem>
<para>
Çerezin ismi.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>değer</parameter></term>
<listitem>
<para>
Çerezin değeri. Bu değer istemcinin bilgisayarında saklanır. Bu
bakımdan çerezlerde güvenlik ihlaline konu bilgiler saklanmamalıdır.
<parameter>isim</parameter> bağımsız değişkeninde
<literal>'çerezim'</literal> isminin kullanıldığı varsayımıyla, bu
çerezin değeri <varname>$_COOKIE['çerezim']</varname> değişkeni ile
alınabilir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>süreler_veya_seçenekler</parameter></term>
<listitem>
<para>
Çerezin zaman aşımına uğrama süresi. Değer bir Unix zaman damgasıdır.
Bu değeri elde etmenin tek yolu, <function>time</function> işlevinden
dönen değere çerezin zaman aşımına uğrayacağı süreyi saniye cinsinden
eklemektir. Örneğin, <literal>time()+60*60*24*30</literal>
ile çerez 30 gün sonra zaman aşımına uğrar. Ayrıca,
<function>mktime</function> işlevi de kullanılabilir. Burada 0
atanır veya birşey belirtilmezse, çerez oturumun sonunda (tarayıcı
kapandığında) zaman aşımına uğrar.
</para>
<para>
<note>
<para>
<parameter>süreler_veya_seçenekler</parameter> bağımsız değişkeni
değer olarak bir Unix zaman damgası alır. Bu,
başlıkta belirtilen <literal>Wdy, DD-Mon-YYYY HH:MM:SS GMT</literal>
tarih biçeminin zıddı olup bu dönüşümü PHP dahili olarak yapar.
</para>
</note>
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>yol</parameter></term>
<listitem>
<para>
Çerezin üzerinde etkin olacağı sunucudaki yol. <literal>'/'</literal>
belirtilirse çerez <parameter>alan</parameter>'ın tamamında
kullanılabilir olacaktır. Eğer <literal>'/foo/'</literal>
belirtilirse, çerez sadece <literal>/foo/</literal> dizininde ve
<literal>/foo/bar/</literal> gibi alt dizinlerde kullanılabilir
olacaktır. Öntanımlı değer çerezin atandığı içinde bulunulan dizindir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>alan</parameter></term>
<listitem>
<para>
Çerezin kullanılabileceği (alt)alan. Çerezi
(<literal>'www.example.com'</literal> gibi) bir alt alan adında
kullanılabilir yapmak onu tüm diğer alt alan adlarında da
(w2.www.example.com gibi) kullanılabilir kılacaktır. Çerezi tüm alt alan
adlarında kullanılabilir yapmak için buraya alan adı (örneğimiz için
(<literal>'example.com'</literal>) yazılmalıdır.
</para>
<para>
Eski tarayıcılar hala kullanımdan kalkmış olan ve alt alan adıyla
eşleşme sağlamak için . ile başlatmayı gerektiren <link
xlink:href="&url.rfc;2109">RFC 2109</link>'u gerçeklemektedir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>güvenli</parameter></term>
<listitem>
<para>
Çerezin istemciye güvenli bir HTTPS bağlantısı üzerinden mi
aktarılması gerektiğini belirtmek için kullanılır. &true; belirtildiği
takdirde, çerez sadece güvenli bağlantı mevcutsa gönderilecektir.
Sunucu tarafında, bu çeşit çerezin sadece
(<varname>$_SERVER["HTTPS"]</varname> ile ilgili) güvenli bağlantı
üzerinden gönderilmesi kararı yazılımcıya aittir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>sadece_http</parameter></term>
<listitem>
<para>
&true; olduğu takdirde çerez sadece HTTP protokolü üzerinden
erişilebilir olacaktır. Yani çerez, JavaScript gibi betik dilleri
tarafından erişilebilir olmayacaktır. Bu ayarlama, XSS saldırılarıyla
kimlik hırsızlığı riskini etkin şekilde azaltmaya (tüm tarayıcılar
tarafından desteklenmese de) yardımcı olabilir, fakat bu sava çoğunlukla
itiraz edilir. Değer olarak &true; veya &false; belirtilebilir.
</para>
</listitem>
</varlistentry>
<varlistentry>
<term><parameter>seçenekler</parameter></term>
<listitem>
<para>
<literal>zaman_aşımı</literal>, <literal>yol</literal>,
<literal>alan</literal>, <literal>güvenli</literal>,
<literal>sadece_http</literal> ve <literal>samesite</literal>
bağımsız değişkenlerinden herhangi birine sahip olabilen ilişkisel bir
dizi. Bunlar dışında bir anahtar varsa, <constant>E_WARNING</constant>
seviyesinde bir hata üretilir. Değerler, aynı ada sahip bağımsız
değişkenler için açıklananla aynı anlama sahiptir.
<literal>samesite</literal> öğesinin değeri <literal>None</literal>,
<literal>Lax</literal> veya <literal>Strict</literal> olmalıdır. İzin
verilen seçeneklerden herhangi biri belirtilmezse, bunların öntanımlı
değerleri, açık bağımsız değişkenlerin öntanımlı değerleri ile aynıdır.
<literal>samesite</literal> öğesi atlanırsa, SameSite çerez özelliği
ayarlanmaz.
</para>
<para>
<note>
<para>
Listelenen anahtarlar arasında olmayan öznitelikleri içeren bir çerez
belirtmek için <function>header</function> işlevi kullanılır.
</para>
</note>
</para>
</listitem>
</varlistentry>
</variablelist>
</para>
</refsect1>
<refsect1 role="returnvalues">
&reftitle.returnvalues;
<para>
Bu işlev çağrılmadan önce yapılmış çıktı varsa
<function>setcookie</function> başarısız olup &false; döndürür.
<function>setcookie</function> başarılı olduğu takdirde &true; döndürür.
Dönüş değeri, kullanıcının çerezi kabul ettiği ya da etmediği anlamına
gelmez.
</para>
</refsect1>
<refsect1 role="changelog">
&reftitle.changelog;
<para>
<informaltable>
<tgroup cols="2">
<thead>
<row>
<entry>&Version;</entry>
<entry>&Description;</entry>
</row>
</thead>
<tbody>
<row>
<entry>8.2.0</entry>
<entry>
Çerezin tarih biçemi <literal>'D, d M Y H:i:s \G\M\T'</literal> oldu;
evvelce <literal>'D, d-M-Y H:i:s T'</literal> idi.
</entry>
</row>
<row>
<entry>7.3.0</entry>
<entry>
<parameter>seçenekler</parameter> dizisini destekleyen ek bir yöntem
tanımı eklendi. Dizi içinde SameSite çerezinin değerleri de
destekleniyor.
</entry>
</row>
</tbody>
</tgroup>
</informaltable>
</para>
</refsect1>
<refsect1 role="examples">
&reftitle.examples;
<para>
Çerez gönderimi ile ilgili bazı örnekler:
<example>
<title>- <function>setcookie</function> gönderim örneği</title>
<programlisting role="php">
<![CDATA[
<?php
$value = 'bir şeyler bir yerlere';
setcookie("TestCookie", $value);
setcookie("TestCookie", $value, time()+3600); /* 1 saatliğine geçerli */
setcookie("TestCookie", $value, time()+3600, "/~rasmus/", "example.com", true);
?>
]]>
</programlisting>
</example>
</para>
<para>
Çerez gönderilirken çerez değerinin otomatik olarak URL kodlamasından
geçirileceğine, alınırken ise bu kodlamanın yine otomatik olarak
çözüleceğine ve yine aynı çerez ismine atanacağına dikkat ediimalidir. Bu
istenmiyorsa, Bu işlevin yerine
<function>setrawcookie</function> işlevi kullanılabilir. Deneme
çerezimizin bir betik içindeki değerini görmek için aşağıdaki örneklerden
biri kullanılabilir:
</para>
<para>
<informalexample>
<programlisting role="php">
<![CDATA[
<?php
// Bağımsız bir çerez bas
echo $_COOKIE["TestCookie"];
// Tüm çerezleri görmek için başka bir yol
print_r($_COOKIE);
?>
]]>
</programlisting>
</informalexample>
</para>
<para>
<example>
<title>- <function>setcookie</function> silme örneği</title>
<para>
Bir çerezi silerken, tarayıcının yürürlükten kaldırma mekanizmasını
tetikleyebilmek için, süre bitiminin geçmişte kalmasını sağlamanız
gerekir. Önceki örnekte gönderilen çerezin silinmesi:
</para>
<programlisting role="php">
<![CDATA[
<?php
// süre bitimini 1 saat önceye ayarla
setcookie ("TestCookie", "", time() - 3600);
setcookie ("TestCookie", "", time() - 3600, "/~rasmus/", "example.com", 1);
?>
]]>
</programlisting>
</example>
</para>
<para>
<example>
<title>- <function>setcookie</function> ve diziler</title>
<para>
Çerez ismini belirtirken dizi gösterimini kullanmak suretiyle çerez
dizileri tanımlanabilir. Bu sayede dizi elemanı sayısı kadar çerez
tanımlanabilir, fakat çerezler betikle alındığında değerlerin
hepsi çerez isminde bir diziye yerleştirilir:
</para>
<programlisting role="php">
<![CDATA[
<?php
// çerezleri tanımla
setcookie("cookie[three]", "cookiethree");
setcookie("cookie[two]", "cookietwo");
setcookie("cookie[one]", "cookieone");
// sayfayı yeniden yükledikten sonra çerezler bas
if (isset($_COOKIE['cookie'])) {
foreach ($_COOKIE['cookie'] as $name => $value) {
$name = htmlspecialchars($name);
$value = htmlspecialchars($value);
echo "$name : $value <br />\n";
}
}
?>
]]>
</programlisting>
&example.outputs;
<screen>
<![CDATA[
three : cookiethree
two : cookietwo
one : cookieone
]]>
</screen>
</example>
<note>
<simpara>
Çerez isminin paraçası olarak <literal>[</literal> ve <literal>]</literal>
gibi ayırıcı karakterlerin kullanımı RFC 6265, bölüm 4 ile uyumlu değildir,
fakat RFC 6265, bölüm 5'e göre kullanıcı istemcileri tarafından
desteklendikleri varsayılmıştır.
</simpara>
</note>
</para>
</refsect1>
<refsect1 role="notes">
&reftitle.notes;
<note>
<para>
Bu işlevi çağırmadan önce, tarayıcıya gönderilene
kadar sunucuda bekletilmek üzere çıktı bir tampona yazılabilir. Bu
işlem, betikten <function>ob_start</function> ve
<function>ob_end_flush</function> işlevlerini çağırarak veya
<literal>output_buffering</literal> yapılandırma
yönergesi &php.ini; veya sunucu yapılandırma dosyalarında belirtilerek
yapılabilir.
</para>
</note>
<para>
Bilinen Güçlükler:
<itemizedlist>
<listitem>
<simpara>
Çerezler sonraki sayfada görünür olmak üzere atanırlar, dolayısıyla
sonraki sayfa yüklenene kadar görünür olmazlar. Bir çerezin başarıyla
tanımlanıp tanımlanmadığını anlayabilmek için çerez zaman aşımına
uğramadan sonraki sayfa üzerinde çerez denenmelidir. Zaman aşımı
süresi <parameter>zaman_aşımı</parameter> bağımsız değişkeni ile
belirtilebilir. Bir çerezin varlığını sınamanın en kolay yolu
<literal>print_r($_COOKIE);</literal> çağrısı yapmaktır.
</simpara>
</listitem>
<listitem>
<simpara>
Çerezler atandıkları sırada kullanılan bağımsız değişkenler kullanılarak
silinmelidir. <parameter>değer</parameter> bağımsız değişkeninde bir boş
dizge belirtilir ve tüm diğer bağımsız değişkenlerin çerezi atarken
kullanılan bağımsız değişkenlerle aynı olması sağlanırsa, ismi
belirtilen çerez uzak istemciden silinir. Bu işlem dahili olarak
çereze <literal>'deleted'</literal> değeri atanarak ve zaman aşımı
tarihi bir yıl önceye çekilerek gerçekleştirilir.
</simpara>
</listitem>
<listitem>
<simpara>
Bir çereze silmek amacıyla &false; değeri atanırken mantıksal değerler
kullanılmamalıdır. &false; için <emphasis>0</emphasis>, &true; için
<emphasis>1</emphasis> kullanılmalıdır.
</simpara>
</listitem>
<listitem>
<simpara>
Çerez isimleri dizi isimleri olabilir. Böylece PHP betiğinde bu
çerezler için dizi kullanılırken, kullanıcının sisteminde bunlar ayrı
ayrı çerezler olarak saklanırlar. Tek bir çereze çok sayıda isim ve
değer atamak için <function>explode</function> işlevi
kullanılabilir. Güvenlik zafiyeti oluşturması nedeniyle bu işlem
için <function>serialize</function> işlevinin kullanılması
önerilmemektedir.
</simpara>
</listitem>
</itemizedlist>
</para>
<simpara>
Peşpeşe pek çok <function>setcookie</function> çağrısı yapılabilir.
</simpara>
</refsect1>
<refsect1 role="seealso">
&reftitle.seealso;
<para>
<simplelist>
<member><function>header</function></member>
<member><function>setrawcookie</function></member>
<member><link linkend="features.cookies">Çerezler bölümü</link></member>
<member><link xlink:href="&url.rfc;6265">RFC 6265</link></member>
<member><link xlink:href="&url.rfc;2109">RFC 2109</link></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
-->