<?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.examples.basic.php',
    1 => 'Основы использования',
    2 => 'Основы использования',
  ),
  'up' => 
  array (
    0 => 'session.examples.php',
    1 => 'Примеры',
  ),
  'prev' => 
  array (
    0 => 'session.examples.php',
    1 => 'Примеры',
  ),
  'next' => 
  array (
    0 => 'session.idpassing.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.examples.basic" class="section">
  <h2 class="title">Основы использования</h2>
  <p class="para">
   Сессии являются простым способом хранения информации для отдельных пользователей
   с уникальным идентификатором сессии. Это может использоваться для сохранения
   состояния между запросами страниц. Идентификаторы сессий обычно отправляются
   браузеру через сессионный cookie и используются для получения имеющихся данных
   сессии. Отсутствие идентификатора сессии или сессионного cookie сообщает PHP о том,
   что необходимо создать новую сессию и сгенерировать новый идентификатор сессии.
  </p>
  <p class="para">
   Сессии используют простую технологию. Когда сессия создана, PHP будет либо получать
   существующую сессию, используя переданный идентификатор (обычно из сессионного
   cookie) или, если ничего не передавалось, будет создана новая сессия. PHP заполнит
   суперглобальную переменную <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var> сессионной информацией
   после того, как будет запущена сессия. Когда PHP завершает работу, он автоматически
   сериализует содержимое суперглобальной переменной <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>
   и отправит для сохранения, используя сессионный обработчик для записи сессии.
  </p>
  <p class="para">
   По умолчанию PHP использует внутренний обработчик <code class="parameter">files</code>
   для сохранения сессий, который установлен в INI-переменной <a href="session.configuration.php#ini.session.save-handler" class="link">session.save_handler</a>.
   Этот обработчик сохраняет данные на сервере в директории, указанной в конфигурационной
   директиве <a href="session.configuration.php#ini.session.save-path" class="link">session.save_path</a>.
  </p>
  <p class="para">
   Сессии могут запускаться вручную с помощью функции <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span>.
   Если директива <a href="session.configuration.php#ini.session.auto-start" class="link">session.auto_start</a> установлена
   в <code class="parameter">1</code>, сессия автоматически запустится, в начале запроса.
  </p>
  <p class="para">
   Сессия обычно завершает свою работу, когда PHP заканчивает исполнять скрипт, но может
   быть завершена и вручную с помощью функции <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>.
  </p>
  <p class="para">
   <div class="example" id="example-1">
    <p><strong>Пример #1 
     Регистрация переменной с помощью <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />session_start</span><span style="color: #007700">();<br />if (!isset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">])) {<br />  </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">] = </span><span style="color: #0000BB">0</span><span style="color: #007700">;<br />} else {<br />  </span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">]++;<br />}<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
   <div class="example" id="example-2">
    <p><strong>Пример #2 
     Отмена объявления переменной с помощью <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
    </strong></p>
    <div class="example-contents">
<div class="phpcode"><code><span style="color: #000000"><span style="color: #0000BB">&lt;?php<br />session_start</span><span style="color: #007700">();<br />unset(</span><span style="color: #0000BB">$_SESSION</span><span style="color: #007700">[</span><span style="color: #DD0000">'count'</span><span style="color: #007700">]);<br /></span><span style="color: #0000BB">?&gt;</span></span></code></div>
    </div>

   </div>
  </p>
  <p class="para">
   <div class="caution"><strong class="caution">Предостережение</strong>
    <p class="para">
     НЕ ОЧИЩАЙТЕ <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var> целиком, используя
     <code class="literal">unset($_SESSION)</code>, так как это отключит возможность
     регистрации сессионных переменных через суперглобальную переменную
     <var class="varname"><a href="reserved.variables.session.php" class="classname">$_SESSION</a></var>.
    </p>
   </div>
  </p>
  <div class="warning"><strong class="warning">Внимание</strong>
   <p class="para">
    Вы не можете использовать ссылки в сессионных переменных, так как не
    существует реального способа восстановления ссылки к другой переменной.
   </p>
  </div>
  <blockquote class="note"><p><strong class="note">Замечание</strong>: 
   <p class="para">
    Сессии, использующие файлы (по умолчанию в PHP), блокируют файл сессии
    сразу при открытии сессии функцией <span class="function"><a href="function.session-start.php" class="function">session_start()</a></span> или
    косвенно при указании <a href="session.configuration.php#ini.session.auto-start" class="link">session.auto_start</a>.
    После блокировки, ни один другой скрипт не может получить доступ к этому же файлу
    сессии, пока он не будет закрыт или при завершении скрипта или при вызове функции
    <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span>.
   </p>
   <p class="para">
    Скорее всего это станет проблемой для сайтов, которые активно используют AJAX
    и делают несколько одновременных запросов. Простейшим путём решить эту проблему
    будет вызов функции <span class="function"><a href="function.session-write-close.php" class="function">session_write_close()</a></span> сразу же как только
    все требуемые изменения в сессии будут сделаны, предпочтительно ближе к началу работы
    скрипта. Также можно использовать другой механизм сессии, который поддерживает
    конкурентный доступ.
   </p>
  </p></blockquote>
 </div><?php manual_footer($setup); ?>