Используя Aerospike в качестве бэкэнда для сессий PHP, я бы хотел изменить сериализатор по умолчанию с «php» на «igbinary».
Вот мой стек:
Вот простой пример PHP-скрипта для тестирования:
<?php
ini_set('display_errors', 'on');
ini_set('error_reporting', E_ALL);
ini_set('session.save_handler','aerospike');
ini_set('session.save_path','sessions|sess|127.0.0.1:3000');
// Start session
session_start();
// Write session
$_SESSION['test'] = time();
// Read session
$db = new Aerospike(["hosts" => [[ "addr" => "127.0.0.1", "port" => 3000 ]]]);
$key = $db->initKey('sessions', 'sess', session_id());
$status = $db->get($key, $record);
echo htmlentities($record['bins']['PHP_SESSION']);
Это работает как ожидалось. Вот вывод:
test|i:1464615088;
Если я изменю сериализатор сеанса с WDDX например, это все еще работает:
<?php
[...]
ini_set('session.save_handler','aerospike');
ini_set('session.save_path','sessions|sess|127.0.0.1:3000');
ini_set('session.serialize_handler', 'wddx');
[...]
Вот вывод:
<wddxPacket version='1.0'><header/><data><struct><var name='test'><number>1464615227</number></var></struct></data></wddxPacket>
Но когда я меняю сериализатор с igbinary, как это:
<?php
[...]
ini_set('session.save_handler','aerospike');
ini_set('session.save_path','sessions|sess|127.0.0.1:3000');
ini_set('session.serialize_handler', 'igbinary');
значение сеанса не сохраняется (строка не найдена в аэроспайке). Вот вывод:
Notice: Undefined index: bins in /var/www/test.php on line 42
Обратите внимание, что igbinary, кажется, хорошо работает со стандартным бэкэндом сессии PHP (файлы)
#ini_set('session.save_handler','aerospike');
#ini_set('session.save_path','sessions|sess|127.0.0.1:3000');
ini_set('session.serialize_handler', 'igbinary');
[...]
echo $_SESSION['test'];
$_SESSION['test'] = time();
Это выдает «1464615840» или около того (после обновления), как и ожидалось.
Мне не хватает какой-либо опции конфигурации, чтобы использовать igbinary в качестве сериализатора для сеансов Aerospike?
Кто-нибудь уже с успехом использовал igbinary в качестве сериализатора для Aerospike?
Там открыт тянуть запрос это исправит это, вероятно, появится в следующем выпуске, совместимом с PHP7.
Других решений пока нет …