ユーザー登録完了後とログアウト後に特定のセッションを破棄する
セッションの開始
セッション破棄の前にセッションの開始について書いてみたい。
wordpressのセッション開始は、
wp-config.php
の先頭にセッションパラメータの設定と開始するための関数を記述している。
session_set_cookie_params (0 , '/', '.'.DOMAIN_CURRENT_SITE); session_start();
session_set_cookie_paramsについては、phpのマニュアルを参照して好みに設定を行うのが良い。
http://php.net/manual/ja/function.session-set-cookie-params.php
上のコードの設定では、
- ユーザーがブラウザを閉じるまで
- ルート以下すべての階層でセッションを開始
- サブドメイン間でセッションを継続
といった内容でセッションパラメータを設定している。
セッションの破棄
wordpressに限らずセッションを作成したら何かしらタイミングで消す処理を行っておきたい。wordpressには、セッションを消すタイミングをアクションフックに関連付けることで、セッションを削除することができる。
以下の例では、
- signup_finished
- wp_logout
というwordpressのaction hookに独自の関数(セッション削除関数)を関連付けている。
add_action('signup_finished', array($this, 'session_clear')); add_action('wp_logout', array($this, 'session_clear_logout'));
独自関数内では以下のようにしてセッションを消すことができる。
function session_clear() { //$_SESSION = array(); unset($_SESSION['WPLANG']); unset($_SESSION['lc']); session_destroy(); }
signup_finishedでは、ユーザー登録およびブログの登録プロセスが完了したタイミングでセッション変数を削除することが可能。WPLANGというセッション変数に言語情報を格納し、ユーザー登録プロセスの間中言語情報を維持するために利用している。
wp_logoutはログアウト時のアクションフックで、そのタイミングで独自に設定しているセッション変数を個別に削除するようにしている。
$_SESSION = array();
を利用することで全セッション変数を初期化することができるが、個人的には個別にunsetしていく方法がおすすめだと思っている。