徹底解説!WordPressでセッションを利用する方法と仕組み(サンプルコード付き)
みなさんこんにちは!エンジニアの高澤です!
今回は、WordPressのセッションを使用する方法について解説していきたいと思います。
セッションとは簡単にいうと「ページ間で特定のデータを保持する仕組み」のことをいいます。
このセッションは非常に重要な技術といっても過言ではなく、様々なシステムや処理の実装で必要になる場面が多々あります。
非常に重要な技術ゆえに当記事では徹底的に解説しておりますため、ぜひお役立ていただけましたら幸いです。
目次
セッションとは
セッションは、ウェブサイトやウェブアプリケーションなどの各ページ間で一時的な情報を保持するための仕組みです。
例えばAページで設定されたデータをそのままBページへ引き継ぐことができ、各ページ間で共通のデータを表示したりすることができます。
厳密に仕組みとしては、クライアントとサーバーの間で一時的な情報を保持することによってデータを共有できるようにしております。
セッションは、クライアントとサーバーの間で一意の識別子(セッション ID)を使用して識別されます。
通常、セッション ID はクッキーまたは URL パラメーターを介してクライアントに送信され、サーバー側ではそのセッション ID を使用して特定のセッションを識別します。
セッションは、通常、以下のような状況で使用されます。
- 一時的なデータの保存
- ユーザーのログイン状態の管理
- ショッピングカートやフォームのデータの一時保存
それぞれ解説させていただきます。
一時的なデータの保存
ユーザーがページ間で情報をやり取りする場合、セッションを使用してその情報を保持します。
たとえば、ページAで入力した情報をページBに送信する際に、セッションを介して情報を渡すことができます。
ユーザーのログイン状態の管理
ユーザーがログインすると、サーバー側でそのログイン状態がセッションとして保存されます。
その後のリクエストにおいても、そのセッションが有効であれば、ユーザーはログインした状態を維持できます。
ショッピングカートやフォームのデータの一時保存
ユーザーが商品をカートに追加したり、フォームに入力したデータをサーバー側で一時的に保存する場合、セッションを使用してその情報を管理します。
これにより、ユーザーがページを移動しても、情報を保持したままにすることができます。
セッションのメリット
セッションのメリットは、ユーザーごとに一意のセッションを保持し、ウェブアプリケーションの状態を管理することができる点です。
しかし、セッションはサーバーのリソースを消費するため、効率的な管理が必要です。
セッションの実装方法
それでは早速、セッションの実装方法について解説していきたいと思います。
セッションの実装は以下の手順になるかと思います。
- session_start()関数を定義
- セッションの値を設定
- セッションの値を表示
- セッションを削除(必要があれば)
それぞれ解説いただいます。
session_start()関数を定義
まずはWordPressセッションを利用するための準備をします。
WordPressでセッションを利用できるようにするためには、必ずセッションを設定したり取得したり表示したりする手前にsession_start()関数を記述してセッション開始のセットアップを行わなければなりません。
そのため、WordPressではtemplate_redirectフックでセッションが開始されていない場合はsession_start()関数が発火してセッションが開始されるコードをfunctions.phpに記述して対応します。
以下のコードをfunctions.phpにコピー&ペーストしてください。
<?php
// セッションを開始する関数
function init_session_start() {
// セッションが開始されていない場合に開始する
if (session_status() !== PHP_SESSION_ACTIVE):
session_start();
endif;
}
// 'template_redirect' アクションフックに init_session_start 関数をフックする
add_action('template_redirect', 'init_session_start');
上記のコードによって、WordPress サイト全体でセッションを使用することができます。
セッションが開始されると、セッション変数($_SESSION)を使用して情報を保持したり、ユーザーのログイン状態を管理したりすることができます。
セッションの値を設定
セッションの開始ができたら、次はセッションの値を設定していきます。
セッションを設定するとき(表示するときも含め)はセッションを管理するためのスーパーグローバル変数である$_SESSION変数を使用します。
以下のコードを任意のPHPテンプレートファイルにコピー&ペーストしてください。
当記事ではページAに記述するとします。
<?php
// ページAでセッションに値を設定する
$_SESSION['value'] = 'サンプルテキスト'; // セッション変数に値を設定する
上記コードでは、「value」というキーに「サンプルテキスト」という文字列を設定しています。
つまり、ページAでこの行が実行されると、セッションに「value」というキーで「サンプルテキスト」という値が保存されます。
このようにしてセッション変数を設定すると、そのセッションが有効な間は他のページでも同じセッション変数を参照することができます。
セッションが終了するか、セッション変数が明示的に削除されるまで、この値は保持されます。
セッションの値を表示
セッションの値の設定できたら、次はセッションを表示します。
以下のコードを任意のPHPテンプレートファイルにコピー&ペーストしてください。
当記事ではページBに記述するとします。
<?php
// ページBでセッションの値をチェックして表示する
if(isset($_SESSION['value']) && $_SESSION['value'] == 'サンプルテキスト'):
echo $_SESSION['value']; // セッション変数の値を表示する
endif;
上記コードでは、if文にてセッション変数「value」がセットされているかどうかをチェックしています。
セッション変数がセットされている場合は true
を返し、そうでない場合は false
を返します。
trueを返した場合は$_SESSION[‘value’]をechoしてページAで設定した「サンプルテキスト」という文字列が表示されます。
セッションを削除
セッションのデータの役割が完了し不要になった場合は最後に使用したセッションを削除します。
場合によってはセッションをそのままにしてデータを保持したままにしておくこともあるかと思いますが、その場合は後述するphp.iniで設定したデータ保持期間の間はそのままにしておくことも可能です。
ですが、不要になったデータは削除することが基本かと思いますので、当記事では削除するところまで解説できればと思います。
以下のコードを任意のPHPテンプレートファイルにコピー&ペーストしてください。
当記事ではページCに記述するとします。
<?php
// セッション変数を削除する
unset($_SESSION['value']);
// セッションを破棄する
session_destroy();
上記コード中のunset()
関数は、指定された変数を削除します。
つまりセッション変数「value」を削除しています。
セッション変数が削除されると、そのセッション変数に関連付けられたデータも削除されます。
また、session_destroy()
関数は、現在のセッションを破棄します。
これにより、セッション ID も無効化され、セッションに関連付けられたデータも削除されます。
同時に、クライアント側に保存されているセッションクッキーも削除されます。
これでセッションのデータは削除され、セッションのライフサイクルは完了します。
ここまでの内容でWordPressでのセッションの使い方の解説の基本は以上になります。お疲れ様でした!
セッションの有効期限を変更する方法
セッションの有効期限を変更するには、サーバーにあるphp.iniというPHPの設定ファイルによって決められております。
ご自身がお使いのサーバーがレンタルサーバーであれば、サーバー管理画面からphp.iniの設定ページがあるはずなので、お使いのレンタルサーバーのマニュアルをご確認いただければと思います。
あらかじめ記述されていない場合もあるので、記述が無い場合は追加してください。
以下は、php.ini ファイルでセッションの管理に関連する設定を変更するための記述例です。
クッキーの有効期限設定
session.cookie_lifetime = 86400
この例では、セッションのクッキーの有効期限を 86400 秒(1 日)に設定しています。
初期値は「0」で、通常ブラウザを閉じるまでクッキーが有効となっておりますが、この設定をすることで86400 秒(1 日)後に削除されるようになります。
数値は任意の数値に変更してください。
セッションファイルの有効期限を変更
session.gc_maxlifetime = 86400
この例では、セッションファイルの有効期限を 86400 秒(1 日)に設定しています。
初期値は「1440」で、セッションファイルの有効期限を秒数で指定しています。
セッションファイルを削除するタイミング
セッションファイルの有効期限を変更しましたが、有効期限が上記の秒数経過したからといって、即座にセッションファイルが削除されるわけではありません。
通常はセッションの有効期限が切れて次に接続した際に、100分の1の確率でセッションファイルが削除されます。
これを変更するには、php.iniに下記の設定を記述する必要があります。
session.gc_probability = 1
session.gc_divisor = 1
この例では、有効期限切れのセッションファイルを削除する(ガベージコレクションを実行する)タイミングを指定しています。
上記設定は、session.gc_divisor = 1とすることによって、1/1 で有効期限が切れ、確実にセッションが破棄されるようになります。
また違うパターンとして以下の記述にすると、1/1000の確率で有効期限切れのセッションファイルを削除します。
session.gc_probability=1
session.gc_divisor=1000
このgcってなに?と疑問に思われた方がいらっしゃるかと思いますが、PHPは、セッションのガベージコレクション(GC)と呼ばれるプロセスを使用して、古いセッションファイルを定期的に削除します。
このプロセスは、php.ini ファイルで設定された確率に基づいて定期的に実行されます。
具体的には、「session.gc_probability
」と「session.gc_divisor
」に設定で指定された割合に従って、セッションファイルの削除が実行されます。
これらの設定を php.ini ファイルに追加または変更することで、セッションの管理方法をカスタマイズすることができます。
ただし、変更を行う場合は、サーバーの設定やセキュリティ上の考慮事項に注意して行ってください。
まとめ
WordPressにおけるセッションの使い方の解説は以上になります。
セッションとは「ページ間で特定のデータを保持する仕組み」のことをいいます。
このセッションは様々なシステムや処理の実装で必要になる場面が多々ある非常に重要な仕組みといっても過言ではありません。
よろしければぜひ当記事をお仕事でご活用いただけましたら幸いです。
お気軽に皆さんのご要望をお聞かせください!
どんなに些細なことでも構いません!よろしければ記事や当サイトへの「こんな記事があったら仕事とかで役に立つな〜」や「こうだったらもっと役に立つのに!」といったようなご要望等をお気軽にお聞かせください!今後のサービス改善にお役立てさせていただきます!
例1)Reactの技術記事を書いてほしい!
例2)WordPressの使い方とかを初心者向けに解説してほしい!...など