Heroku 環境で、PHP のセッション情報を memcached に保存するようにします。
MemCachier アドオンを追加
memcached は、MemCachier アドオンを利用します。(無料プランあり)
https://addons.heroku.com/memcachier
$ heroku addons:add memcachier
PHP で Memcached 拡張を利用
PHP で、Memcached 拡張のセッションハンドラを使って、セッション情報を memcached に保存するようにします。
composer.json
のrequire
に、Memcached 拡張を追加します。
"require": {
"ext-memcached": "*",
}
セッションハンドラ設定
PHPで、Memcached拡張のセッションハンドラを利用するように設定します。
MemCachier をアドオンに追加すると、以下の接続情報が環境変数にセットされます。
- MEMCACHIER_SERVERS = memcached ホスト
- MEMCACHIER_USERNAME = 接続ユーザ名
- MEMCACHIER_PASSWORD = 接続パスワード
これらの値を直接.user.ini
に記述しても良いのですが、環境変数から取得したいので、PHPスクリプト内でini_set()
で設定します。
下記では、memcachedへの持続的接続も指定しています。
<?php
ini_set('session.save_handler', 'memcached');
ini_set('session.save_path', 'PERSISTENT=pool ' . getenv('MEMCACHIER_SERVERS'));
ini_set('memcached.sess_binary', 1);
ini_set('memcached.sess_sasl_username', getenv('MEMCACHIER_USERNAME'));
ini_set('memcached.sess_sasl_password', getenv('MEMCACHIER_PASSWORD'));
これで設定は完了です。
あとは通常どおりsession_start()
して、$_SESSION
に値をセットすれば、セッション情報が memcached に保存されます。
Dyno を複数にするなどして、確認してみましたが、それぞれの Dyno でセッション情報が共有できていました。