Сессии в kohana 3.2

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

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

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

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

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

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

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

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

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

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

$session = Session::instance();

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

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

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

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

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

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

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

$var = $session->get('var')

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

<?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;
   }
}
?>

Применение

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

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

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

Гиламов Данис

Приветствую вас уважаемый посетитель! Меня зовут Данис, на страницах дневника я пишу о том что мне интересно: программирование, саморазвитие, спорт, мои размышления, творчество. Надеюсь вы сможете найди для себя полезную информацию, если вы что-то заметили, захотели обсудить, прошу оставлять комментарии в статьях, в Журнале или Написать мне Для меня - это лучшая награда. Спасибо за внимание :)

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

  • Алексей

    Меня интересует два вопроса:
    1) как вообще в этой чертовой документации коханы можно чтото найти? Я все перерыл, не нашел там упоминания того, что сессию можно хранить в базе. Только native И coockies.
    2)Если я хочу, чтобы сессия не истекала (нужна функция remember me), как это сделать?

    • Danis92

      Не знаю я чаще лезу в код пытаюсь разобраться на месте если не получается курю мануалы.
      2.Про второй пункт не совсем понял.

  • sergc1

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

    _data[$key] = $value; }}?>

    Простите но это же метод set в /system/classes/kohana/session.php.
    или я что не совсем понял?

  • Danis92

    Да тут похоже не то скопировал )

  • Hamper

    Ну так set и так вполне сам умеет апдейтить запись 🙄