php のセッションにmemcached を使う

CentOSの場合

  • install

rpmforgeのレポジトリが入っていない人は以下の手順で追加

# wget http://dag.wieers.com/packages/rpmforge-release/rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# rpm -Uhv rpmforge-release-0.3.6-1.el5.rf.i386.rpm
# yum install libevent memcached php-pecl-memcache
  • 設定

/etc/php.ini を以下のように編集

session.save_handler = memcache
session.save_path = "memcached.example.com:11211"

/etc/sysconfig/memcached を以下のように適当に編集する。

PORT="11211"
USER="nobody"
MAXCONN="1024"
CACHESIZE="64"
OPTIONS=""
  • スタート

memcached デーモンをスタート

# chkconfig memcached on
# service memcached start

Apacheをリスタート

# service httpd restart
  • 各種設定

パケットキャプチャみると、各値の有効期限が、1440秒になっている。設定場所がわからない。
ソースを見てみると、

memcache_session.c:		if (mmc_pool_store(pool, "set", sizeof("set")-1, key_tmp, key_tmp_len, 0, INI_INT("session.gc_maxlifetime"), val, vallen TSRMLS_CC)) {

session.gc_maxlifetime を使っているのが分かる。

これで、有効期限を設定できた。