У меня есть приложение CakePHP, размещенное на AWS Elastic Beanstalk. Из-за нескольких экземпляров EC2, которые я буду использовать в будущем, я хочу сохранить свои сеансы PHP в базе данных. AWS предоставляет очень хорошую библиотеку для хранения PHP-сессий в базе данных DynamoDB. См http://goo.gl/URoi3sCakePHP: Используйте обработчик сеанса DynamoDB AWS
Теперь я гнал на AWS SDK в папку мои поставщики и создали обертку доступа к нему (а плагин):
<?php
Configure::load('aws');
require_once VENDORS . 'autoload.php';
use Aws\Common\Aws;
class AwsComponent extends Component
{
private $_aws;
public function __construct()
{
$this->_aws = Aws::factory(array(
'key' => Configure::read('Aws.key'),
'secret' => Configure::read('Aws.secret'),
'region' => Configure::read('Aws.region')
));
}
public function getClient($service)
{
return $this->_aws->get($service);
}
}
Обертка работает хорошо, я уже реализованы некоторые S3 вещи. Теперь для обработчика сеанса я добавил следующий код на AppController.php:
public $components = array('Aws.Aws');
public function beforeFilter()
{
$this->_setSessionStorage();
}
private function _setSessionStorage()
{
$client = $this->Aws->getClient('dynamodb');
$client->registerSessionHandler(array(
'table_name' => 'sessions'
));
}
внутренний registerSessionHandler АМС (в) выполняется (тестировал), но сессия не неоспоримым хранится в таблице DynamoDB. Конечно, я создал таблицу раньше, и если я добавлю вызов в библиотеку AWS прямо к моему webroot/index.php, перед загрузкой диспетчера все будет работать нормально.
Я думаю, проблема в том, что мой код выполняется после вызова CakePHP session_start(). Итак, каков наилучший способ реализовать это? http://goo.gl/kUFUIR не помогает мне, я не хочу переписывать библиотеку AWS для совместимости с интерфейсом CakePHP.
ОК спасибо, если это единственный способ, я дам ему попробовать. – iscon