1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

CodeIgniterでライブラリのSession使っていたところをDynamoDBのSessionHandlerに置き換えた話

Last updated at Posted at 2018-09-19

環境

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などは各々適切に用意してください。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?