Aerospike PHP 会话序列化程序 igbinary
Aerospike PHP Session Serializer igbinary
使用 Aerospike 作为 PHP 会话的后端,我想将默认序列化程序从 "php" 更改为 "igbinary"。
这是我的堆栈:
- Linux Debian Jessie 8.4
- PHP 5.6.20
- Aerospike 社区服务器 v3.8.2.3
- PHP 客户端库 v3.4.8
- igbinary v1.2.1
这是一个简单的示例 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');
会话值未保存(在 aerospike 中未找到行)。这是输出:
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 的序列化程序?
有一个开放的 pull request 可以修复它,可能会在即将推出的 PHP7 兼容版本中推出。
使用 Aerospike 作为 PHP 会话的后端,我想将默认序列化程序从 "php" 更改为 "igbinary"。
这是我的堆栈:
- Linux Debian Jessie 8.4
- PHP 5.6.20
- Aerospike 社区服务器 v3.8.2.3
- PHP 客户端库 v3.4.8
- igbinary v1.2.1
这是一个简单的示例 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');
会话值未保存(在 aerospike 中未找到行)。这是输出:
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 的序列化程序?
有一个开放的 pull request 可以修复它,可能会在即将推出的 PHP7 兼容版本中推出。