Spec-Zone.ru › CodeIgniter 4

Библиотека сессий

Класс Session позволяет вам сохранять «состояние» пользователя и отслеживать его активность во время просмотра вашего сайта.

CodeIgniter поставляется с несколькими драйверами хранения сессий, которые вы можете увидеть в последнем разделе оглавления:

  • Использование класса Session
    • Инициализация сессии
    • Как работают сессии?
    • Что такое данные сессии?
    • Получение данных сессии
    • Добавление данных сессии
    • Добавление нового значения в данные сессии
    • Удаление данных сессии
    • Flashdata
    • Tempdata
    • Удаление сессии
    • Доступ к метаданным сессии
  • Настройки сессии
  • Драйверы сессий
    • Драйвер FileHandler (по умолчанию)
    • Драйвер DatabaseHandler
    • Драйвер RedisHandler
    • Драйвер MemcachedHandler

Использование класса Session

Инициализация сессии

Сессии обычно выполняются глобально при каждом запросе на страницу, поэтому класс Session должен быть магически инициализирован.

Для доступа и инициализации сессии:

$session = \Config\Services::session($config);

Параметр $config необязателен — это конфигурация вашего приложения. Если он не указан, службы зарегистрируют вашу по умолчанию.

После загрузки объект библиотеки Sessions будет доступен с помощью:

$session

В качестве альтернативы вы можете использовать вспомогательную функцию, которая будет использовать параметры конфигурации по умолчанию. Этот вариант немного удобнее для чтения, но не принимает никаких параметров конфигурации.

$session = session();

Как работают сессии?

Когда страница загружается, класс сессии проверяет, отправлен ли действительный куки сессии браузером пользователя. Если куки сессии не существует (или он не совпадает с сохранённым на сервере или истек), будет создана и сохранена новая сессия.

Если действительная сессия существует, её информация будет обновлена. При каждом обновлении идентификатор сессии может быть сгенерирован заново, если это настроено.

Важно понимать, что после инициализации класс Session работает автоматически. Вам ничего не нужно делать, чтобы вызвать это поведение. Вы можете, как увидите ниже, работать с данными сессии, но процесс чтения, записи и обновления сессии автоматический.

Примечание

В командной строке библиотека Session автоматически останавливается, так как это понятие основано исключительно на протоколе HTTP.

Примечание о конкурентности

Если вы не разрабатываете веб-сайт с интенсивным использованием AJAX, можете пропустить этот раздел. Если вы это делаете и у вас возникают проблемы с производительностью, то это примечание — именно то, что вам нужно.

Сессии в предыдущих версиях CodeIgniter не реализовывали блокировки, что означало, что два HTTP-запроса, использующие одну и ту же сессию, могли выполняться одновременно. Проще говоря — запросы были асинхронными.

Однако асинхронные запросы в контексте сессий также небезопасны, так как изменения в данных сессии (или перегенерация идентификатора сессии) в одном запросе могут повлиять на выполнение второго, параллельного запроса. Эта особенность была причиной многих проблем и основной причиной того, почему в CodeIgniter 4 полностью переработана библиотека сессий.

Зачем мы вам об этом говорим? Потому что, скорее всего, после попытки найти причину проблем с производительностью, вы можете сделать вывод, что проблема в блокировках, и поэтому захотите узнать, как их удалить…

НЕ ДЕЛАЙТЕ ЭТОГО! Удаление блокировок будет неправильно и принесёт вам больше проблем!

Проблема не в блокировках, а в их решении. Ваша проблема в том, что сессия остаётся открытой, хотя вы уже обработале её и больше не нуждаетесь в ней. Вам нужно закрыть сессию для текущего запроса после того, как вы больше в ней не нуждаетесь.

$session->destroy();

Что такое данные сессии?

Данные сессии — это просто массив, связанный с определенным идентификатором сессии (cookie).

Если вы раньше использовали сессии в PHP, вам должна быть знакома суперглобальная переменная PHP $_SESSION (если нет, пожалуйста, прочитайте содержимое этой ссылки).

CodeIgniter предоставляет доступ к данным сессии таким же образом, так как использует механизм обработчиков сессий, предоставляемый PHP. Работа с данными сессии так же проста, как манипулирование массивом $_SESSION (чтение, установка и удаление значений).

Кроме того, CodeIgniter также предоставляет 2 специальных типа данных сессии, которые подробно описаны ниже: flashdata и tempdata.

Получение данных сессии

Любая информация из массива сессии доступна через суперглобальную переменную $_SESSION:

$_SESSION['item']

Или через стандартный метод доступа:

$session->get('item');

Или через магический метод получения:

$session->item

Или даже через вспомогательную функцию сессии:

session('item');

Где item — ключ массива, соответствующий элементу, который вы хотите получить. Например, чтобы присвоить ранее сохранённое значение «name» переменной $name, вы сделаете так:

$name = $_SESSION['name'];

// or:

$name = $session->name

// or:

$name = $session->get('name');

Примечание

Метод get() возвращает null, если элемент, к которому вы пытаетесь получить доступ, не существует.

Если вы хотите получить все существующие данные пользователя, вы можете просто опустить ключ элемента (магический метод получения работает только для отдельных значений свойств):

$_SESSION

// or:

$session->get();

Добавление данных сессии

Предположим, определённый пользователь входит на ваш сайт. После проверки подлинности вы можете добавить его имя пользователя и адрес электронной почты в сессию, что сделает эти данные доступными глобально, без необходимости выполнения запроса к базе данных при необходимости.

Вы можете просто присвоить данные массиву $_SESSION, как и любой другой переменной. Или как свойство $session.

Предыдущий метод userdata устарел, но вы можете передать массив с новыми данными сессии в метод set():

$session->set($array);

Где $array — ассоциативный массив, содержащий новые данные. Вот пример:

$newdata = [
    'username'  => 'johndoe',
    'email'     => 'johndoe@some-site.com',
    'logged_in' => true,
];

$session->set($newdata);

Если вы хотите добавить данные сессии по одному значению за раз, set() также поддерживает такой синтаксис:

$session->set('some_name', 'some_value');

Если вы хотите проверить, существует ли значение сессии, просто проверьте его с помощью isset():

// returns false if the 'some_name' item doesn't exist or is null,
// true otherwise:
isset($_SESSION['some_name'])

Или вы можете вызвать has():

$session->has('some_name');

Добавление нового значения в данные сессии

Метод push используется для добавления нового значения в массив данных сессии. Например, если ключ «хобби» содержит массив увлечений, вы можете добавить новое значение в массив следующим образом:

$session->push('hobbies', ['sport'=>'tennis']);

Удаление данных сессии

Так же, как и с любой другой переменной, удаление значения в $_SESSION может быть выполнено с помощью unset():

unset($_SESSION['some_name']);

// or multiple values:

unset(
    $_SESSION['some_name'],
    $_SESSION['another_name']
);

Также, как и set() можно использовать для добавления информации в сессию, remove() можно использовать для её удаления, передав ключ сессии. Например, если вы хотите удалить «some_name» из массива данных сессии:

$session->remove('some_name');

Этот метод также принимает массив ключей элементов для удаления:

$array_items = ['username', 'email'];
$session->remove($array_items);

Flashdata

CodeIgniter поддерживает «flashdata», или данные сессии, которые будут доступны только для следующего запроса, а затем автоматически очищаются.

Это может быть очень полезно, особенно для одноразовых информационных, сообщений об ошибках или статусных сообщений (например: «Запись 2 удалена»).

Следует отметить, что переменные flashdata — это обычные переменные сессии, управляемые внутри обработчика сессий CodeIgniter.

Чтобы пометить существующий элемент как «flashdata»:

$session->markAsFlashdata('item');

Если вы хотите пометить несколько элементов как flashdata, просто передайте ключи в виде массива:

$session->markAsFlashdata(['item', 'item2']);

Чтобы добавить flashdata:

$_SESSION['item'] = 'value';
$session->markAsFlashdata('item');

Или в качестве альтернативы, используя метод setFlashdata():

$session->setFlashdata('item', 'value');

Вы также можете передать массив в setFlashdata(), аналогично set().

Чтение переменных flashdata — это то же самое, что чтение обычных данных сессии с помощью $_SESSION:

$_SESSION['item']

Важно

Метод get() БУДЕТ возвращать элементы flashdata при получении отдельного элемента по ключу. Однако он не вернет flashdata при получении всех данных пользователя из сессии.

Однако, если вы хотите быть уверены, что вы читаете «flashdata» (а не что-либо другое), вы также можете использовать метод getFlashdata():

$session->getFlashdata('item');

Или чтобы получить массив со всеми flashdata, просто опустите параметр ключа:

$session->getFlashdata();

Примечание

Метод getFlashdata() возвращает null, если элемент не найден.

Если вам нужно сохранить переменную flashdata в дополнительном запросе, вы можете сделать это с помощью метода keepFlashdata(). Вы можете передать либо отдельный элемент, либо массив элементов flashdata, которые нужно сохранить.

$session->keepFlashdata('item');
$session->keepFlashdata(['item1', 'item2', 'item3']);

Tempdata

CodeIgniter также поддерживает «tempdata», или данные сессии с определенным временем истечения срока действия. После истечения срока действия, истечения срока действия сессии или её удаления значение автоматически удаляется.

Аналогично flashdata, переменные tempdata управляются внутри обработчика сессий CodeIgniter.

Чтобы пометить существующий элемент как «tempdata», просто передайте его ключ и время истечения срока действия (в секундах!) в метод markAsTempdata():

// 'item' will be erased after 300 seconds
$session->markAsTempdata('item', 300);

Вы можете пометить несколько элементов как tempdata двумя способами, в зависимости от того, хотите ли вы, чтобы все они имели одинаковое время истечения срока действия или нет:

// Both 'item' and 'item2' will expire after 300 seconds
$session->markAsTempdata(['item', 'item2'], 300);

// 'item' will be erased after 300 seconds, while 'item2'
// will do so after only 240 seconds
$session->markAsTempdata([
    'item'    => 300,
    'item2'    => 240,
]);

Чтобы добавить tempdata:

$_SESSION['item'] = 'value';
$session->markAsTempdata('item', 300); // Expire in 5 minutes

Или, альтернативно, используя метод setTempdata():

$session->setTempdata('item', 'value', 300);

Вы также можете передать массив в setTempdata():

$tempdata = ['newuser' => true, 'message' => 'Thanks for joining!'];
$session->setTempdata($tempdata, null, $expire);

Примечание

Если срок действия не указан или установлен в 0, будет использовано значение по умолчанию для времени жизни — 300 секунд (или 5 минут).

Для чтения переменной tempdata, вы также можете получить доступ к ней через массив суперглобальных переменных $_SESSION:

$_SESSION['item']

Важно

Метод get() БУДЕТ возвращать элементы tempdata при получении одного элемента по ключу. Однако он не вернёт tempdata при получении всех данных пользователя из сессии.

Или, если вы хотите быть уверены, что читаете «tempdata» (а не что-то другое), вы также можете использовать метод getTempdata():

$session->getTempdata('item');

И, конечно же, если вы хотите получить все существующие tempdata:

$session->getTempdata();

Примечание

Метод getTempdata() возвращает null, если элемент не найден.

Если вам нужно удалить значение tempdata до истечения срока его действия, вы можете напрямую удалить его из массива $_SESSION:

unset($_SESSION['item']);

Однако это не удалит метку, которая делает этот конкретный элемент tempdata (она будет аннулирована при следующем HTTP-запросе). Поэтому, если вы планируете повторно использовать этот же ключ в том же запросе, вам следует использовать removeTempdata():

$session->removeTempdata('item');

Уничтожение сессии

Чтобы очистить текущую сессию (например, во время выхода из системы), вы можете просто использовать функцию PHP session_destroy() или метод библиотеки destroy(). Оба метода будут работать точно так же:

session_destroy();

// or

$session->destroy();

Примечание

Это должна быть последняя операция, связанная с сессией, которую вы выполняете в рамках одного запроса. Все данные сессии (включая flashdata и tempdata) будут навсегда уничтожены, а функции будут недоступны в рамках одного запроса после уничтожения сессии.

Вы также можете использовать метод stop() для полного уничтожения сессии, удалив старый session_id, уничтожив все данные и уничтожив cookie, содержавший session id:

$session->stop();

Доступ к данным о сессии

В предыдущих версиях CodeIgniter массив данных сессии по умолчанию содержал 4 элемента: ‘session_id’, ‘ip_address’, ‘user_agent’, ‘last_activity’.

Это было из-за особенностей работы сессий, но теперь это больше не нужно в нашей новой реализации. Однако возможно, ваше приложение полагалось на эти значения, поэтому ниже приведены альтернативные способы доступа к ним:

  • session_id: session_id()
  • ip_address: $_SERVER['REMOTE_ADDR']
  • user_agent: $_SERVER['HTTP_USER_AGENT'] (не используется сессиями)
  • last_activity: Зависит от хранилища, нет простого способа. Извините!

Настройки сессии

CodeIgniter обычно делает все работающим «из коробки». Однако сессии — очень важная часть любого приложения, поэтому необходимо произвести некоторую тщательную настройку. Пожалуйста, уделите время, чтобы рассмотреть все варианты и их влияние.

Вы найдёте следующие настройки сессии в файле app/Config/App.php:

Настройка Значение по умолчанию Варианты Описание
sessionDriver CodeIgniter\Session\Handlers\FileHandler CodeIgniter\Session\Handlers\FileHandler CodeIgniter\Session\Handlers\DatabaseHandler CodeIgniter\Session\Handlers\MemcachedHandler CodeIgniter\Session\Handlers\RedisHandler CodeIgniter\Session\Handlers\ArrayHandler Драйвер хранения сессии для использования.
sessionCookieName ci_session Только символы [A-Za-z_-] Имя, используемое для cookie сессии.
sessionExpiration 7200 (2 часа) Время в секундах (целое число) Количество секунд, в течение которых должна сохраняться сессия. Если вы хотите сессию, не истекающую до закрытия браузера, установите значение в ноль: 0
sessionSavePath null Нет Указывает расположение хранилища, зависит от используемого драйвера.
sessionMatchIP false true/false (логическое) Необходимо ли проверять IP-адрес пользователя при чтении cookie сессии. Обратите внимание, что некоторые провайдеры динамически изменяют IP, поэтому, если вы хотите сессию, не истекающую до закрытия браузера, вы, скорее всего, установите это значение в false.
sessionTimeToUpdate 300 Время в секундах (целое число) Этот параметр управляет частотой, с которой класс сессии будет регенерировать себя и создавать новый идентификатор сессии. Установка значения 0 отключит регенерацию идентификатора сессии.
sessionRegenerateDestroy false true/false (логическое) Необходимо ли уничтожить данные сессии, связанные со старым идентификатором сессии, при автоматической регенерации идентификатора сессии. При установке значения false данные будут позже удалены сборщиком мусора.

Примечание

В крайнем случае, библиотека Session попытается получить настройки PHP, связанные с сессиями, а также устаревшие настройки CI, такие как ‘sess_expire_on_close’, если какие-либо из вышеперечисленных не настроены. Однако вы никогда не должны полагаться на это поведение, так как это может привести к непредсказуемым результатам или быть изменено в будущем. Пожалуйста, настройте всё должным образом.

Примечание

Если sessionExpiration установлено в 0, настройка session.gc_maxlifetime , заданная PHP в управлении сессиями, будет использоваться как есть (часто значение по умолчанию 1440). Это необходимо изменить в php.ini или через ini_set() при необходимости.

В дополнение к вышеперечисленным значениям, cookie и собственные драйверы применяют следующие значения конфигурации, общие для классов IncomingRequest и Security:

Настройка Значение по умолчанию Описание
cookieDomain ‘’ Домен, для которого применима сессия
cookiePath / Путь, для которого применима сессия
cookieSecure false Создавать cookie сессии только по защищённым (HTTPS) соединениям
cookieSameSite Lax Параметр SameSite для cookie сессии

Примечание

Настройка ‘cookieHTTPOnly’ не влияет на сессии. Вместо этого параметр HttpOnly всегда включён по соображениям безопасности. Кроме того, настройка ‘cookiePrefix’ полностью игнорируется.

Драйверы сессий

Как уже упоминалось, библиотека сессий поставляется с 4 обработчиками или системами хранения данных, которые вы можете использовать:

  • CodeIgniter\Session\Handlers\FileHandler
  • CodeIgniter\Session\Handlers\DatabaseHandler
  • CodeIgniter\Session\Handlers\MemcachedHandler
  • CodeIgniter\Session\Handlers\RedisHandler
  • CodeIgniter\Session\Handlers\ArrayHandler

По умолчанию при инициализации сессии будет использоваться драйвер FileHandler , потому что это самый безопасный выбор, и он, как ожидается, будет работать везде (практически в любой среде есть файловая система).

Однако любой другой драйвер может быть выбран через строку public $sessionDriver в вашем файле app/Config/App.php, если вы решите это сделать. Однако имейте в виду, что каждый драйвер имеет свои особенности, поэтому обязательно ознакомьтесь с ними (ниже), прежде чем принимать решение.

Примечание

ArrayHandler используется во время тестирования и хранит все данные в массиве PHP, предотвращая сохранение данных.

Драйвер FileHandler (по умолчанию)

Драйвер ‘FileHandler’ использует вашу файловую систему для хранения данных сессии.

Можно с уверенностью сказать, что он работает точно так же, как собственный по умолчанию механизм сессий PHP, но если для вас это важная деталь, знайте, что это, на самом деле, не тот же код, и у него есть некоторые ограничения (и преимущества).

Более конкретно, он не поддерживает форматы уровня каталогов и режимов PHP, используемые в session.save_path, и большинство параметров в нём жестко закодированы для безопасности. Вместо этого поддерживаются только абсолютные пути для public $sessionSavePath.

Еще одна важная вещь, которую следует знать, — убедитесь, что вы не используете общедоступный или общий каталог для хранения файлов сессии. Убедитесь, что только у вас есть доступ к содержимому каталога вашего выбранного sessionSavePath. В противном случае любой, кто сможет это сделать, может также украсть любую из текущих сессий (также известный как атака «фиксация сессии»).

В системах UNIX это обычно достигается путем установки разрешений на режим 0700 для этого каталога с помощью команды chmod , что позволяет только владельцу каталога выполнять операции чтения и записи в нём. Но будьте осторожны, так как системный пользователь, выполняющий скрипт, обычно не ваш, а что-то вроде ‘www-data’, поэтому просто установка этих разрешений, скорее всего, сломает ваше приложение.

Вместо этого вы должны сделать что-то подобное, в зависимости от вашей среды

mkdir /<path to your application directory>/Writable/sessions/
chmod 0700 /<path to your application directory>/Writable/sessions/
chown www-data /<path to your application directory>/Writable/sessions/

Бонус-совет

Некоторые из вас, вероятно, предпочтут выбрать другой драйвер сессии, потому что хранение файлов обычно медленнее. Это только наполовину правда.

Очень простой тест, вероятно, заставит вас поверить, что база данных SQL быстрее, но в 99% случаев это верно только пока у вас всего несколько текущих сессий. По мере увеличения количества сессий и нагрузки на сервер — именно в это время это важно — файловая система будет последовательно превосходить почти все схемы реляционных баз данных.

Кроме того, если производительность — единственное ваше беспокойство, вы можете рассмотреть использование tmpfs (предупреждение: внешний ресурс), что может сделать ваши сессии очень быстрыми.

Драйвер DatabaseHandler

Драйвер ‘DatabaseHandler’ использует реляционную базу данных, такую как MySQL или PostgreSQL, для хранения сессий. Это популярный выбор среди многих пользователей, потому что он предоставляет разработчику лёгкий доступ к данным сессии в приложении — это всего лишь ещё одна таблица в вашей базе данных.

Однако, существуют некоторые условия, которые необходимо соблюсти:

  • Вы НЕ можете использовать постоянное подключение.

Для использования драйвера сессий ‘DatabaseHandler’ вам также необходимо создать упомянутую таблицу и затем установить её как ваше значение $sessionSavePath. Например, если вы хотите использовать ‘ci_sessions’ в качестве имени таблицы, вы сделаете так:

public $sessionDriver   = 'CodeIgniter\Session\Handlers\DatabaseHandler';
public $sessionSavePath = 'ci_sessions';

И, конечно же, создайте таблицу в базе данных …

Для MySQL:

CREATE TABLE IF NOT EXISTS `ci_sessions` (
    `id` varchar(128) NOT null,
    `ip_address` varchar(45) NOT null,
    `timestamp` timestamp DEFAULT CURRENT_TIMESTAMP NOT null,
    `data` blob NOT null,
    KEY `ci_sessions_timestamp` (`timestamp`)
);

Для PostgreSQL:

CREATE TABLE "ci_sessions" (
    "id" varchar(128) NOT NULL,
    "ip_address" inet NOT NULL,
    "timestamp" timestamptz DEFAULT CURRENT_TIMESTAMP NOT NULL,
    "data" bytea DEFAULT '' NOT NULL
);

CREATE INDEX "ci_sessions_timestamp" ON "ci_sessions" ("timestamp");

Вам также потребуется добавить первичный ключ в зависимости от вашего параметра ‘sessionMatchIP’. Приведенные ниже примеры работают как в MySQL, так и в PostgreSQL:

// When sessionMatchIP = true
ALTER TABLE ci_sessions ADD PRIMARY KEY (id, ip_address);

// When sessionMatchIP = false
ALTER TABLE ci_sessions ADD PRIMARY KEY (id);

// To drop a previously created primary key (use when changing the setting)
ALTER TABLE ci_sessions DROP PRIMARY KEY;

Вы можете выбрать группу баз данных для использования, добавив новую строку в файл app/Config/App.php с именем группы для использования:

public $sessionDBGroup = 'groupName';

Если вы не хотите делать всё это вручную, вы можете использовать команду session:migration из командной строки для генерации файла миграции:

> php spark session:migration
> php spark migrate

Эта команда учтёт настройки sessionSavePath и sessionMatchIP при генерации кода.

Важно

Официально поддерживаются только базы данных MySQL и PostgreSQL из-за отсутствия механизмов консультирования блокировок на других платформах. Использование сессий без блокировок может вызвать множество проблем, особенно при интенсивном использовании AJAX, и мы не будем поддерживать такие случаи. Используйте session_write_close() после обработки данных сессии, если у вас проблемы с производительностью.

Драйвер RedisHandler

Примечание

Поскольку Redis не имеет механизма блокировки, блокировки для этого драйвера эмулируются с помощью отдельного значения, которое хранится в течение 300 секунд.

Redis — это движок хранения, обычно используемый для кэширования, и популярный благодаря высокой производительности, что, вероятно, и является причиной использования вами драйвера сессий ‘RedisHandler’.

Недостатком является то, что он не так распространён, как реляционные базы данных, и требует установки PHP-расширения phpredis на вашей системе, а это расширение не входит в стандартную поставку PHP. Вероятнее всего, вы будете использовать драйвер RedisHandler только в том случае, если вы уже знакомы с Redis и используете его для других целей.

Так же, как и с драйверами ‘FileHandler’ и ‘DatabaseHandler’, вам также необходимо настроить место хранения ваших сессий с помощью параметра $sessionSavePath. Формат здесь немного отличается и одновременно сложен. Лучше всего он объясняется в файле README расширения phpredis, поэтому мы просто ссылаемся вас на него:

https://github.com/phpredis/phpredis

Предупреждение

Библиотека сессий CodeIgniter НЕ использует фактический ‘redis’ session.save_handler. Обращайте внимание только на формат пути в ссылке выше.

Однако в большинстве случаев достаточно простой пары host:port:

public $sessionDiver    = 'CodeIgniter\Session\Handlers\RedisHandler';
public $sessionSavePath = 'tcp://localhost:6379';

Драйвер MemcachedHandler

Примечание

Поскольку Memcached не имеет механизма блокировки, блокировки для этого драйвера эмулируются с помощью отдельного значения, которое хранится в течение 300 секунд.

Драйвер ‘MemcachedHandler’ очень похож на драйвер ‘RedisHandler’ во всех своих свойствах, за исключением, возможно, доступности, поскольку PHP-расширение Memcached распространяется через PECL, и некоторые дистрибутивы Linux предоставляют его в виде легко устанавливаемого пакета.

Помимо этого, и без каких-либо намеренных предубеждений в пользу Redis, о Memcached нечего особо добавить — это также популярный продукт, обычно используемый для кэширования и известный своей скоростью.

Однако стоит отметить, что единственной гарантией Memcached является то, что установка значения X для истечения срока действия через Y секунд приведёт к его удалению через Y секунд (но не обязательно, что оно не истечёт раньше этого времени). Это случается очень редко, но следует учитывать, поскольку это может привести к потере сессий.

Формат $sessionSavePath здесь довольно простой, являясь просто парой host:port:

public $sessionDriver   = 'CodeIgniter\Session\Handlers\MemcachedHandler';
public $sessionSavePath = 'localhost:11211';

Дополнительный совет

Также поддерживается конфигурация с несколькими серверами с необязательным параметром weight в качестве третьего значения, разделенного двоеточием (:weight). Но необходимо отметить, что мы не проверяли надёжность этого.

Если вы хотите экспериментировать с этой функцией (на свой страх и риск), просто разделите пути к нескольким серверам запятыми:

// localhost will be given higher priority (5) here,
// compared to 192.0.2.1 with a weight of 1.
public $sessionSavePath = 'localhost:11211:5,192.0.2.1:11211:1';

© 2014–2020 British Columbia Institute of Technology
Licensed under the MIT License.
https://codeigniter.com/user_guide/libraries/sessions.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API