14
16

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.

Heroku + PHP でセッション情報を memcached に保存する

Last updated at Posted at 2014-06-07

Heroku 環境で、PHP のセッション情報を memcached に保存するようにします。

MemCachier アドオンを追加

memcached は、MemCachier アドオンを利用します。(無料プランあり)

https://addons.heroku.com/memcachier

$ heroku addons:add memcachier

PHP で Memcached 拡張を利用

PHP で、Memcached 拡張のセッションハンドラを使って、セッション情報を memcached に保存するようにします。

composer.jsonrequireに、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 でセッション情報が共有できていました。

14
16
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
14
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?