Updated newlines
[kohana-userguide.git] / guide / ru-ru / using.sessions.md
blobbddfd5fed145287f3346091e6efd1ae572184926
1 # Сессии и Куки
3 Kohana предоставляет пару классов, которые облегчают работу с куками и сессиями. На верхнем уровне и сессии, и куки обеспечивают одни и те же функции. Они позволяют разработчику хранить временную или постоянную инфомацию о конкретном клиенте для дальнейшего использования.
5 Куки следует использовать для хранения публичных (некритичных) данных, неизменных в течении длительного времени. Например, хранить идентификатор пользователя или предпочитаемый язык. Используйте класс [Cookie] для установки и получения кук.
7 [!!] Kohana работает с "подписанными" куками. Каждая хранимая кука содержит хэша для предотвращения подмены значения куки. Этот хэш генерируется методом [Cookie::salt], который учитывает свойство [Cookie::$salt]. Вам следует [изменить настройки](using.configuration), когда будете опубликовывать свое приложение.
9 Сессии лучше использовать для хранения временных или секретных данных. Крайне критичную информацию стоит хранить в классе [Session] с драйвером "database" или "native". Когда используется драйвер "cookie", сессия должна быть зашифрована.
11 [!!] Больше информации о работе с переменными сессии Вы можете получить в статье [семь смертных грехов сессий](http://lists.nyphp.org/pipermail/talk/2006-December/020358.html).
13 # Хранение, извлечение и удаление данных
15 [Cookie] и [Session] предоставляют очень схожий API для хранения данных. Главное отличие между ними в том, что доступ к сессии осуществляется как к объекту, а к кукам - как статическому классу (хэлпер).
17 Получить объект сессии можно посредством метода [Session::instance]:
19     // Get the session instance
20     $session = Session::instance();
22 Вы можете также получить все данные сессии с помощью метода [Session::as_array]:
24     // Get all of the session data as an array
25     $data = $session->as_array();
27 Также есть возможность переписать глобальную переменную `$_SESSION`. чтобы работать с сессиями в более привычном, стандартном для PHP стиле:
29     // Overload $_SESSION with the session data
30     $_SESSION =& $session->as_array();
31     
32     // Set session data
33     $_SESSION[$key] = $value;
35 ## Хранение данных {#setting}
37 Для сохранения данных сессии или куки применяется метод `set`:
39     // Set session data
40     $session->set($key, $value);
42     // Set cookie data
43     Cookie::set($key, $value);
45     // Store a user id
46     $session->set('user_id', 10);
47     Cookie::set('user_id', 10);
49 ## Получение данных {#getting}
51 Извлечение данных сессии или кук возможно посредством метода `get`:
53     // Get session data
54     $data = $session->get($key, $default_value);
56     // Get cookie data
57     $data = Cookie::get($key, $default_value);
59     // Get the user id
60     $user = $session->get('user_id');
61     $user = Cookie::get('user_id');
63 ## Удаление данных {#deleting}
65 Метод `delete` позволяет удалить данные из сессии или кук:
67     // Delete session data
68     $session->delete($key);
70     // Delete cookie data
71     Cookie::delete($key);
73     // Delete the user id
74     $session->delete('user_id');
75     Cookie::delete('user_id');
77 # Настройка {#configuration}
79 И куки, и сессии имеют несколько параметров, которые влияют на механизм хранение данных. Всегда проверяйте их перед завершением приложения, так как многие из них будут напрямую влиять на безопасность Вашего приложения.
81 ## Настройка кук
83 Все настройки изменяются через статические свойства. Вы можете изменить их либо через `bootstrap.php`, либо посредством [расширения классов](using.autoloading#class-extension).
85 Наиболее важный параметр это [Cookie::$salt], он используется для шифрования подписи. Значение необходимо поменять и держать в тайне:
87     Cookie::$salt = 'your secret is safe with me';
89 [!!] Изменение данного значения сделает недействительными все сохраненные ранее куки.
91 По умолчанию куки хранятся до закрытия браузера. Чтобы указать свое значение для времени жизни, измените параметр [Cookie::$expiration]:
93     // Set cookies to expire after 1 week
94     Cookie::$expiration = 604800;
96     // Alternative to using raw integers, for better clarity
97     Cookie::$expiration = Date::WEEK;
99 Адрес, с которого куки могут быть доступны, может быть ограничен параметром [Cookie::$path].
101     // Allow cookies only when going to /public/*
102     Cookie::$path = '/public/';
104 Домен, на котором куки будут доступны, указан в свойстве [Cookie::$domain].
106     // Allow cookies only on the domain www.example.com
107     Cookie::$domain = 'www.example.com';
109 Если Вы хотите сделать куку доступной для всех поддоменов, поставьте точку перед началом домена
111     // Allow cookies to be accessed on example.com and *.example.com
112     Cookie::$domain = '.example.com';
114 Чтобы разрешить куки только по защищенному (HTTPS) соединению, установите [Cookie::$secure] параметр.
116     // Allow cookies to be accessed only on a secure connection
117     Cookie::$secure = TRUE;
118     
119     // Allow cookies to be accessed on any connection
120     Cookie::$secure = FALSE;
122 Защитите куки от доступа через Javascript, изменив параметр [Cookie::$httponly].
124     // Make cookies inaccessible to Javascript
125     Cookie::$httponly = TRUE;
127 ## Драйверы сессии {#adapters}
129 При создании или доступе к объекту класс [Session] Вы можете выбрать, какой драйвер использовать. Доступны следующие драйверы:
131 Native
132 : Хранит данные в стандартном месте на диске web-сервера. Путь указывается в параметре [session.save_path](http://php.net/manual/session.configuration.php#ini.session.save-path) файла `php.ini` или переопределяется методом [ini_set](http://php.net/ini_set).
134 Database
135 : Хранит информацию в базе данных с помощью класса [Session_Database]. Для работы требуется подключенный модуль [Database].
137 Cookie
138 : Хранит данные в куках, с помощью класса [Cookie]. **Для данного драйвера предельный размер сессии будет равен 4Кб **
140 Драйвер по умолчанию может быть установлен в [Session::$default]. Изначально это драйвер "native".
142 [!!] Как и с куками, установка параметра "lifetime" в "0" означает, что сессия будет уничтожена после закрытия браузера.
144 ### Настройка драйвера сессии
146 Вы можете применить настройки для каждого драйвера, создав конфигурационный файл `APPPATH/config/session.php`. Следующий пример настроек определяет конфигурацию для каждого драйвера:
148     return array(
149         'native' => array(
150             'name' => 'session_name',
151             'lifetime' => 43200,
152         ),
153         'cookie' => array(
154             'name' => 'cookie_name',
155             'encrypted' => TRUE,
156             'lifetime' => 43200,
157         ),
158         'database' => array(
159             'name' => 'cookie_name',
160             'encrypted' => TRUE,
161             'lifetime' => 43200,
162             'group' => 'default',
163             'table' => 'table_name',
164             'columns' => array(
165                 'session_id'  => 'session_id',
166                         'last_active' => 'last_active',
167                         'contents'    => 'contents'
168             ),
169             'gc' => 500,
170         ),
171     );
173 #### Драйвер Native {#adapter-native}
175 Тип       | Параметр  | Описание                                          | По умолчанию
176 ----------|-----------|---------------------------------------------------|-----------
177 `string`  | name      | имя сессии                                        | `"session"`
178 `integer` | lifetime  | время жизни сессии (в секундах)                   | `0`
180 #### Cookie Adapter {#adapter-cookie}
182 Тип       | Параметр  | Описание                                          | По умолчанию
183 ----------|-----------|---------------------------------------------------|-----------
184 `string`  | name      | имя куки, используемой для хранения сессии        | `"session"`
185 `boolean` | encrypted | шифровать данные с помощью [Encrypt]?             | `FALSE`
186 `integer` | lifetime  | время жизни сессии (в секундах)                   | `0`
188 #### Database Adapter {#adapter-database}
190 Тип       | Параметр  | Описание                                          | По умолчанию
191 ----------|-----------|---------------------------------------------------|-----------
192 `string`  | group     | название группы [Database::instance]              | `"default"`
193 `string`  | table     | имя таблицы, в которой хранить данные             | `"sessions"`
194 `array`   | columns   | ассоциативный массив псевдонимов полей            | `array`
195 `integer` | gc        | дает 1:x шанс, что запустится сборка мусора       | `500`
196 `string`  | name      | имя куки, используемой для хранения сессии        | `"session"`
197 `boolean` | encrypted | шифровать данные с помощью [Encrypt]?             | `FALSE`
198 `integer` | lifetime  | время жизни сессии (в секундах)                   | `0`
200 ##### Структура таблицы
202 Вам придется создать таблицу для хранения сессии в базе данных. Вот структура по умолчанию:
204     CREATE TABLE  `sessions` (
205         `session_id` VARCHAR(24) NOT NULL,
206         `last_active` INT UNSIGNED NOT NULL,
207         `contents` TEXT NOT NULL,
208         PRIMARY KEY (`session_id`),
209         INDEX (`last_active`)
210     ) ENGINE = MYISAM;
212 ##### Поля таблицы
214 Вы можете изменить имя полей, чтобы использовать существующую таблицу. По умолчанию используется имя ключа.
216 session_id
217 : название поля "id"
219 last_active
220 : метка времени UNIX для последнего времени обновления сессии
222 contents
223 : данные сессии, хранимые в виде сериализованной и (необязательно) зашифрованной строки