いつのまにかphpMyAdminにログインできなくなっていて、apacheのエラーログを見たら、以下のような記述があった。

PHP Warning:  Unknown: Failed to write session data (files).
Please verify that the current setting of session.save_path...(略)

よく調べてみると、mod_ruidを導入した結果、apacheの実行権限がバーチャルホスト毎に変わるようになったため、書き込み権限が無いことが分かった。

CentOS 5.xのPHPでは、デフォルトのsession_save_path()の値が/var/lib/php/sessionになっているので、以下の方法のいずれかを使用してこのエラーを回避する必要がある。

対処方法

いかのいずれかを使用すること。

  1. session_save_path()関数でセッションデータの保存先のディレクトリを変更する。
  2. httpd.confまたは.htaccessでセッションデータの保存先のディレクトリを変更する。
  3. /var/lib/php/sessionのパーミッションを777に変更する。(デフォルトは770)

などなど。

注意事項

  1. 1または2を使用する場合は、DocumentRoot以下にディレクトリを設置しないこと。
  2. DocumentRoot外でもmod_ruidを使用している場合は、パーミッションを緩くしすぎないこと。(通常は755でOK)
  3. 3の方法はなるべく使用しないこと。

これらに気をつけないとセッションハイジャックのリスクがあります。