[MANUAL] English:
[zend.git] / documentation / manual / ru / module_specs / Zend_Session-BasicUsage.xml
blob30bfb5dd7e83089d015376cc6614260fdb330cd8
1 <sect1 id="zend.session.basicusage">
3     <title>Базовое использование<!--Basic Usage--></title>
5     <para>
6         <code>Zend_Session_Namespace</code> создает экземпляры контейнеров,
7         предоставляющих основной API для работы с данными сессии в Zend
8         Framework. Пространства имен используются для разделения всех данных
9         сессии, несмотря на то, что есть пространство имен по умолчанию для тех,
10         кому нужно только одно пространство имен для всех данных сессии.
11         <code>Zend_Session</code> использует расширение ext/session и его
12         суперглобальный массив <varname>$_SESSION</varname> в качестве механизма
13         хранения постоянных данных сессии. Несмотря на то, что
14         <varname>$_SESSION</varname> остается доступным в глобальном пространстве
15         имен, разработчики должны избегать прямого обращения к нему с тем, чтобы
16         можно было наиболее безопасно и эффективно использовать возможности
17         <code>Zend_Session</code> и <code>Zend_Session_Namespace</code> для
18         работы с сессиями.
19 <!--
20         <code>Zend_Session_Namespace</code> creates instances of containers providing the primary API for manipulating
21         session data in Zend Framework. Namespaces are used to segregate all session data, although a default
22         namespace exists for those who only want one namespace for all their session data. <code>Zend_Session</code>
23         utilizes ext/session and its special <varname>$_SESSION</varname> superglobal as the storage mechanism for session
24         state data. While <varname>$_SESSION</varname> is still available in PHP's global namespace, developers should refrain
25         from directly accessing it, so that <code>Zend_Session</code> and <code>Zend_Session_Namespace</code> can most
26         effectively and securely provide its suite of session related functionality.
27 -->
28     </para>
30     <sect2 id="zend.session.basicexamples">
32         <title>Учебные примеры<!--Tutorial Examples--></title>
34         <para>
35             Если при инстанцировании Zend_Session не было указано пространство
36             имен, то все данные будут неявным образом сохранены в пространстве
37             имен "<code>Default</code>". <code>Zend_Session</code> не
38             предназначен для работы с содержимым контейнера пространства имен
39             сессии напрямую. Вместо этого мы используем
40             <code>Zend_Session_Namespace</code>. Пример ниже демонстрирует
41             использование пространства имен по умолчанию и показывает, как
42             подсчитывать количество просмотров страниц пользователем на сайте.
43             Для тестирования этого примера добавьте следующий код в
44             файл загрузки:
45 <!--
46             If no namespace is specified when instantiating Zend_Session, all data will be transparently stored in a
47             namespace called "<code>Default</code>". <code>Zend_Session</code> is not intended to work directly on the
48             contents of session namespace containers. Instead, we use <code>Zend_Session_Namespace</code>. The example
49             below demonstrates use of this default namespace, showing how to count the number of times a user views
50             pages on your website. To test this example, add the following code to your ZF bootstrap area:
51 -->
52         </para>
54         <example>
55             <title>Подсчет количества просмотров страниц<!--Counting Page Views--></title>
56 <programlisting language="php">
57 <![CDATA[<?php
58     require_once 'Zend/Session.php';
60     $defaultNamespace = new Zend_Session_Namespace('Default');
62     // используется "магический" метод __isset() в Zend_Session_Namespace:
63     if (isset($defaultNamespace->numberOfPageRequests)) {
64         // будет увеличиваться на единицу при каждой загрузке страницы.
65         $defaultNamespace->numberOfPageRequests++;
66     } else {
67         $defaultNamespace->numberOfPageRequests = 1; // начальное значение
68     }
70     echo "Запросов к странице за эту сессию: ", $defaultNamespace->numberOfPageRequests;
71 ?>]]></programlisting>
72         </example>
74         <para>
75             Одним из многих преимуществ Zend_Session_Namespace
76             является то, что при его использовании различными модулями
77             приложения достигается инкапсуляциия принадлежащих им данных сессий.
78             Конструктору Zend_Session можно передавать необязательный аргумент
79             $namespace, который позволяет другим компонентам, модулям и
80             разрабочикам кода быть уверенным в том, что их данные
81             защищены отделением от других областей данных, используемых другими
82             компонентами, модулями и кодами разработчиков. Пространства имен
83             представляют собой эффективный и доступный способ защиты данных
84             сессий от случайных изменений. Имена пространств имен должны быть
85             непустыми строками, не начинающимися со знака подчеркивания. Только
86             основные компоненты, включенные в Zend Framework, должны
87             использовать имена пространств имен, начинающиеся с 'Zend_'.
88 <!--
89             One of the many benefits of Zend_Session_Namespace results when multiple modules use Zend_Session_Namespace
90             and obtain data encapsulation for their session data. Zend_Session can be passed an optional $namespace
91             argument in the constructor, which allows other components, modules, and developer specific code to be
92             assured that their data is protected by a partition between data areas used by other components, modules,
93             and developer code. Namespacing provides an effective and popular way to "secure" a subset of session state
94             data against accidental changes. Namespace names are restricted to character sequences represented as
95             non-empty PHP strings that do not begin with an underscore ('_') character. Only core components included in
96             Zend Framework should use namespace names starting with 'Zend_'.
97 -->
98         </para>
100         <example>
101             <title>Новый подход: избежание конфликтов с помощью пространств имен<!--New Way: Namespaces Avoid Collisions--></title>
102 <programlisting language="php">
103 <![CDATA[<?php
104     // in the Zend_Auth component
105     require_once 'Zend/Session.php';
106     $authNamespace = new Zend_Session_Namespace('Zend_Auth');
107     $authNamespace->user = "myusername";
109     // in a web services component
110     $webServiceNamespace = new Zend_Session_Namespace('Some_Web_Service');
111     $webServiceNamespace->user = "mywebusername";
112 ?>]]></programlisting>
113         </example>
115         <para>
116             Пример выше приводит к тому же результату, что и код ниже, за тем
117             исключением, что объекты сессий сохраняют инкапсуляцию сессионных
118             данных внутри их пространств имен.
119 <!--
120             The example above achieves the same effect as the code below, except that the session objects above preserve
121             encapsulation of session data within their respective namespaces.
123         </para>
125         <example>
126             <title>Старый подход: обращение к сессиям PHP<!--Old Way: PHP Session Access--></title>
127 <programlisting language="php">
128 <![CDATA[<?php
129     $_SESSION['Zend_Auth']['user'] = "myusername";
130     $_SESSION['Some_Web_Service']['user'] = "mywebusername";
131 ?>]]></programlisting>
132         </example>
134     </sect2>
136     <sect2 id="zend.session.iteration">
138         <title>Итерация по пространствам имен<!--Iterating Over Session Namespaces--></title>
140         <para>
141             <code>Zend_Session_Namespace</code> предоставляет полный интерфейс
142             <ulink url="http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html">IteratorAggregate</ulink>,
143             включая поддержку выражения <code>foreach</code>:
144 <!--
145             <code>Zend_Session_Namespace</code> provides the full
146             <ulink url="http://www.php.net/~helly/php/ext/spl/interfaceIteratorAggregate.html">IteratorAggregate interface</ulink>
147             , including support for the <code>foreach</code> statement:
149         </para>
151         <example>
152             <title>Итерация по сессии<!--Session Iteration--></title>
153 <programlisting language="php">
154 <![CDATA[<?php
155     // Zend_Session is iteratable
156     require_once 'Zend/Session.php';
157     $aNamespace = new Zend_Session_Namespace('some_namespace_with_data_present');
158     foreach ($aNamespace as $index => $value) {
159         echo "aNamespace->$index = '$value';\n";
160     }
161 ?>]]></programlisting>
162         </example>
164     </sect2>
166     <sect2 id="zend.session.accessors">
168         <title>Методы доступа для пространств имен<!--Accessors for Session Namespaces--></title>
170         <para>
171             Обычные методы доступа доступны через "магические" методы (magic
172             methods) __set(), __unset(), __isset() и __get(). "Магические"
173             методы не должны использоваться напрямую, кроме как внутри
174             подклассов Zend_Session. Вместо этого используйте обычные операторы
175             для вызова этих "магических" методов, например:
176 <!--
177             The usual accessors are available, via the __set(), __unset(), __isset(), and __get() magic methods. The
178             magic methods should not be used directly, except from within a subclass of Zend_Session. Instead, use the
179             normal operators to invoke these magic methods, such as:
181         </para>
183         <example>
184             <title>Доступ к сессионным данным<!--Accessing Session Data--></title>
185 <programlisting language="php">
186 <![CDATA[<?php
187             $object->property = $value;
188             echo (isset($object->property) ? 'set' : 'unset');
189 ?>]]></programlisting>
190         </example>
192     </sect2>
194 </sect1>