WordPressで$_SESSIONが使えない

wordpress_errorページ遷移のログを簡易的に$_SESSIONに保存して使いまわそうとしたら動作しなかったので調査。

環境: CentOS 6.5, nginx 1.6.2, php-fpm 5.4.33

initにフックしてsession_startしても、各ページでsession_idするたびに新たに新しいIDになって引き継げない。

function hoge_init() {
    if (!session_id()) {
        session_start();
    }
}
add_action('init', 'hoge_init');

調べてみるとPHPの設定でsession.cookie_pathの設定が「/tmp」になってた。
# less /etc/php.ini

session.cookie_path = /tmp

cookie_pathはクッキーを保存するパス(URI)。一致したアクセスのみクッキーを使えるようになる。

cookie_pathを直したら動いた。

他のサーバーをみると「/」だったので、session.save_pathと勘違いして書き換えてたみたい。設定した覚えがないのでどっかのバージョンは/tmpに設定されるかも。

ちなみにsession.save_pathの設定は/etc/php-fpm.d/www.confに記載してある。

 

 

ちょっと深追いしてWordPressと_SESSIONの関係を調査。

WordPressはグローバル変数として_SESSIONを扱っていない。

var_dump($GLOBALS);
するとWordPressが生成したグローバル変数が出力される。

 

ということで$_SESSIONを使うのはやめて、update_user_metaを使うことにした。

 

< Related Posts >