WordPressで$_SESSIONが使えない
ページ遷移のログを簡易的に$_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を扱っていない。
- Php session not working in wordpress page template - Stack Overflow
- Global Variables | WordPress Codex
var_dump($GLOBALS);
するとWordPressが生成したグローバル変数が出力される。
ということで$_SESSIONを使うのはやめて、update_user_metaを使うことにした。
< Related Posts >