Сессии в kohana 3.2

 Всем привет ).

Сегодня мы рассмотрим основные моменты работы с сессиями в kohana 3.2 ,а также немного расширим их функционал )
Сессии как в php так и в kohana используются для хранения состояния веб-приложения или проще говоря скрипта. Под словом «Состояние» я подразумеваю хранения промежуточных данных, таких как к примеру id пользователя ,данных счетчиков и прочее.

Сам класс с функциями для работы с сессиями находится в папке /system/classes/kohana/session.php. Класс для наследования выше уровнем /system/classes/session.php.

Если вам нужна более тщательная настройка для сессий то необходимо создать файл в папке APPPATH/config/с именем session.php.

<br />
return array(<br />
 'native' => array(<br />
 'name' => 'session_name',<br />
 'lifetime' => 43200,<br />
 ),<br />
 'cookie' => array(<br />
 'name' => 'cookie_name',<br />
 'encrypted' => TRUE,<br />
 'lifetime' => 43200,<br />
 ),<br />
 'database' => array(<br />
 'name' => 'cookie_name',<br />
 'encrypted' => TRUE,<br />
 'lifetime' => 43200,<br />
 'group' => 'default',<br />
 'table' => 'table_name',<br />
 'columns' => array(<br />
 'session_id' => 'session_id',<br />
 'last_active' => 'last_active',<br />
 'contents' => 'contents'<br />
 ),<br />
 'gc' => 500,<br />
 ),<br />
);<br />

Теперь подробнее по пунктам ,существуют несколько вариантов хранения сессий ,стандартная конфигурация хранит сессию в cookie ,а можно хранить в базе для этого нужно создать таблицу.

<br />
CREATE TABLE  `sessions` (<br />
    `session_id` VARCHAR(24) NOT NULL,<br />
    `last_active` INT UNSIGNED NOT NULL,<br />
    `contents` TEXT NOT NULL,<br />
    PRIMARY KEY (`session_id`),<br />
    INDEX (`last_active`)<br />
) ENGINE = MYISAM;<br />

При хранении сессий в базе ,можно хранить до 64 кб заместо 4 кб при стандартной конфигурации.
Также необходимо чтобы был подключен модуль database.

Доступные драйвера и их контейнеры для хранения :
cookie – использует кукисы (по умолчанию)
native – использует файлы
database – использует базу данных
cache – использует различные контейнеры (файл, память, база данных) зависит от конфигурации.

Для старта сессий в контроллере пропишите:

<br />
$session = Session::instance();<br />

Если вы используете базу для хранения сессий ,или другие варианты отличные от стандартной конфигурации ,необходимо передать дополнительный параметр в Session::instance() ,кроме этого прописать настройки в файле APPPATH/config/session.php

<br />
// Старт сессий с хранением в базе<br />
$session = Session::instance('database');<br />

Для записи значений в сессию используется метод — set

<br />
// var - имя сессии ,1 - значение<br />
$session->set('var', 1);<br />
// Другой вариант<br />
Session::instance()->set('var', 1);<br />

Для удаления значений в сессии используется метод — delete

<br />
// Var - имя сессии<br />
$session->delete('var');<br />

Для получения значения переменной в сессии используется метод — get

<br />
$var = $session->get('var')<br />

Всего 3 метода ,лично мне не хватило метода для обновления значения переменной в сессии ,я создал дополнительный метод — update ,для этого я расширил класс /system/classes/session.php.

<br />
<?php defined('SYSPATH') or die('No direct script access.');
abstract class Session extends Kohana_Session {
   public function update($key, $value)
   {
     return $this->_data[$key] = $value;<br />
   }<br />
}<br />
?><br />

Применение

<br />
// var - название сессии ,2 - обновляемое значение<br />
$session->update('var',2)<br />

Возможно существуют и другие варианты реализации ,меня лично этот вариант устраивает полностью.
Также полезно почитать офф.документацию kohana 3.2 — http://kohanaframework.org/3.0/guide/kohana/sessions#session-adapter-settings

P.S Если у вас возникли вопросы ,прошу в комментарии )

Вам также может понравиться ...