環境
PHP7
CodeIgniter 3.1.9
DynamoDB
概要
CodeIgniterでWebアプリのSession情報を、DynamoDBに抽出してうんぬんってことをしたいという話。
現状のソースに特に変更の制限とかなかったのですが、それだとつまらないテストや横展開のことなども考え、Sessionライブラリを拡張する方向にしました。
わりかしコンパクトにまとまったので、(こんなニッチな要件はそうそう無いとは思いますが)記事にしてみました。
実装
application/libraries/Session.php
require_once(APPPATH.'libraries/aws/aws-autoloader.php');
use Aws\DynamoDb\DynamoDbClient;
use Aws\DynamoDb\SessionHandler;
Class Session {
// 環境に合わせてkeyとか埋める
public function __construct()
{
$dynamoDb = new DynamoDbClient([
'endpoint' => 'http://dynamodb.ap-northeast-1.amazonaws.com',
'region' => '',
'version' => 'latest',
'credentials' => [
'key' => '',
'secret' => '',
],
]);
$sessionHandler = SessionHandler::fromClient($dynamoDb, [
'table_name' => '',
]);
$sessionHandler->register();
session_start();
}
public function __get($key)
{
return isset($_SESSION[$key]) ? $_SESSION[$key] : null;
}
public function __set($key, $value)
{
$_SESSION[$key] = $value;
}
}
使い方
CodeIgniterは、ライブラリを指定したとき、
・そのライブラリがapplication/librariesにあればapplication/librariesの方を参照
・なければsystem/librariesの方を参照
するので、上のソースをapplication/librariesディレクトリの下に保存してやれば、あとは(もともとconfigやらcontrollerやらでSessionライブラリ呼び出されている前提で)変更なしでCI_Session使っていたところがDynamoDBに置き換わります。
※DynamoDBClientなどは各々適切に用意してください。