<?php
include_once $_SERVER['DOCUMENT_ROOT'] . '/include/shared-manual.inc';
$TOC = array();
$TOC_DEPRECATED = array();
$PARENTS = array();
include_once dirname(__FILE__) ."/toc/session.examples.inc";
$setup = array (
  'home' => 
  array (
    0 => 'index.php',
    1 => 'PHP Manual',
  ),
  'head' => 
  array (
    0 => 'UTF-8',
    1 => 'ru',
  ),
  'this' => 
  array (
    0 => 'session.customhandler.php',
    1 => 'Пользовательские обработчики сессии',
    2 => 'Пользовательские обработчики сессии',
  ),
  'up' => 
  array (
    0 => 'session.examples.php',
    1 => 'Примеры',
  ),
  'prev' => 
  array (
    0 => 'session.idpassing.php',
    1 => 'Передача идентификатора сессии',
  ),
  'next' => 
  array (
    0 => 'session.upload-progress.php',
    1 => 'Отслеживание хода загрузки файлов через сессии',
  ),
  'alternatives' => 
  array (
  ),
  'source' => 
  array (
    'lang' => 'ru',
    'path' => 'reference/session/examples.xml',
  ),
  'history' => 
  array (
  ),
);
$setup["toc"] = $TOC;
$setup["toc_deprecated"] = $TOC_DEPRECATED;
$setup["parents"] = $PARENTS;
manual_setup($setup);

contributors($setup);

?>
<div id="session.customhandler" class="section">
  <h2 class="title">Пользовательские обработчики сессии</h2>
  <p class="para">
   Для реализации хранилища данных (или любого иного хранилища) следует
   использовать <span class="function"><a href="function.session-set-save-handler.php" class="function">session_set_save_handler()</a></span>, чтобы создать
   набор пользовательских функций хранилища. Обработчики сессий можно создать,
   используя класс <span class="classname"><a href="class.sessionhandlerinterface.php" class="classname">SessionHandlerInterface</a></span>, или расширить внутренние обработчики PHP,
   унаследовав класс <span class="classname"><a href="class.sessionhandler.php" class="classname">SessionHandler</a></span>.
  </p>
  <p class="para">
   Функции обратного вызова, указанные в <span class="function"><a href="function.session-set-save-handler.php" class="function">session_set_save_handler()</a></span>, являются методами,
   вызываемыми PHP в течение жизненного цикла сессии: <code class="parameter">open</code>, <code class="parameter">read</code>,
   <code class="parameter">write</code> и <code class="parameter">close</code> и для служебных задач:
   <code class="parameter">destroy</code> для удаления сессии и <code class="parameter">gc</code> для периодической
   сборки мусора.
  </p>
  <p class="para">
   Следовательно, в PHP всегда необходимы обработчики, сохраняющие сессии. По умолчанию работает
   внутренний обработчик &#039;files&#039;, сохраняющий сессии в файлы. Пользовательский обработчик может быть установлен,
   используя функцию <span class="function"><a href="function.session-set-save-handler.php" class="function">session_set_save_handler()</a></span>. Альтернативные обработчики для сохранения сессии
   также доступны в модулях PHP, таких как <code class="parameter">sqlite</code>,
   <code class="parameter">memcache</code> и <code class="parameter">memcached</code> и могут быть установлены с помощью
   <a href="session.configuration.php#ini.session.save-handler" class="link">session.save_handler</a>.
  </p>
  <p class="para">
   Когда стартует сессия, PHP внутренне вызовет обработчик <code class="parameter">open</code> с последующим
   вызовом обработчика <code class="parameter">read</code>, который должен вернуть закодированную строку - в точности такую,
   какая передавалась для сохранения. После возвращения обработчиком <code class="parameter">read</code> закодированной строки, PHP
   декодирует её и заполнит получившимся массивом суперглобальный массив <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
  </p>
  <p class="para">
   Когда PHP завершает исполнение скрипта (или когда вызвана функция <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>),
   PHP внутренне закодирует суперглобальный массив <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>, и передаст
   эти данные с идентификатором сессии функции обратного вызова <code class="parameter">write</code>.
   После того, как отработает функция обратного вызова <code class="parameter">write</code>, PHP внутренне вызовет
   обработчик функции обратного вызова <code class="parameter">close</code>.
  </p>
  <p class="para">
   Когда сессия специально уничтожена, PHP вызовет обработчик <code class="parameter">destroy</code> с
   идентификатором сессии.
  </p>
  <p class="para">
   PHP будет вызывать обработчик функции обратного вызова <code class="parameter">gc</code> время от времени,
  чтобы пометить сессии как истёкшие в соответствии с временем жизни сессий.
  Эта операция удалит все записи из постоянного хранилища, доступ к которым не осуществлялся
  более чем интервал времени, указанный в параметре <code class="parameter">$lifetime</code>.
  </p>
 </div><?php manual_footer($setup); ?>