CodeIgniterのセッション管理を徹底解説!値を保存・取得する基本操作
生徒
「CodeIgniterで、ページを移動してもユーザーの情報を覚えておく方法はありますか?」
先生
「そんな時は『セッション』という機能を使います。これを使えば、ログイン情報などを一時的に保存しておけますよ。」
生徒
「セッション…難しそうですね。初心者でも簡単にデータの保存や取得ができるんでしょうか?」
先生
「もちろんです!CodeIgniterには便利なセッションライブラリが用意されています。一緒に使い方を見ていきましょう!」
1. セッションとは?Webサイトが情報を「覚える」仕組み
プログラミングの世界、特にWeb開発において、セッション(Session)という言葉は非常に重要です。通常、Webサイトを表示するための仕組み(HTTPといいます)は、一度画面を表示すると、その直前の状態を忘れてしまうという性質を持っています。これを「ステートレス」と呼びます。
しかし、実際のWebサイトでは「ログインした状態を維持したい」「ショッピングカートに入れた商品を次のページでも表示したい」という場面がたくさんありますよね。そこで登場するのがセッションです。セッションは、サーバー側にユーザーごとの一時的な情報を保存しておくための「専用のロッカー」のようなものだと考えてください。
CodeIgniter(コードイグナイター)というPHPのフレームワーク(便利な道具箱のようなもの)を使うと、この複雑なセッションの管理を、たった数行のコードで実現することができます。専門的な設定を抜きにして、すぐにデータの保存や取得を始めることができるのがCodeIgniterの大きな魅力です。
2. セッションライブラリの準備(読み込み)
CodeIgniterでセッション機能を使うためには、まず「セッションライブラリ」を使える状態にする必要があります。これを「ロードする」と言います。ライブラリとは、特定の機能(今回はセッション)を動かすためのプログラムの束のことです。
CodeIgniter 4以降では、サービスの機能を使って非常に簡単に呼び出すことができます。コントローラーという、プログラムの司令塔となるファイルの中で、以下のように記述して準備を整えます。
// セッションライブラリを準備します
$session = \Config\Services::session();
この一行を書くだけで、$sessionという変数を使って、自由にデータを出し入れできるようになります。初心者の方は、まず「この魔法の言葉を書けば準備完了!」と覚えておくだけで大丈夫です。パソコンに詳しくなくても、決まった書き方を真似するだけでプログラムは動いてくれます。
3. セッションに値を保存する方法(setメソッド)
準備ができたら、実際にデータを保存してみましょう。セッションに値を保存することを、専門用語で「セットする」と言います。CodeIgniterでは、setという命令を使います。
例えば、ユーザーの名前をセッションに保存して、他のページでも「こんにちは、〇〇さん!」と表示できるようにしてみましょう。以下のコードを見てください。
// セッションの準備
$session = \Config\Services::session();
// 'user_name' という名前のラベルを貼って、'田中太郎' という文字を保存します
$session->set('user_name', '田中太郎');
echo 'セッションに名前を保存しました!';
ここで出てくる'user_name'は「キー(鍵)」と呼ばれ、保存する箱の名前のような役割をします。'田中太郎'が、実際に箱の中に入れる中身(値)です。スーパーのロッカーに荷物を預けるときに、番号札(キー)を受け取るイメージを持つと分かりやすいでしょう。このキーさえ覚えていれば、後でいつでも中身を取り出すことができます。
4. セッションから値を取得する方法(getメソッド)
次に、保存したデータを取り出す方法を学びましょう。データを取り出すことを「ゲットする」と言い、getという命令を使います。先ほど保存した名前を、別のページや別のタイミングで表示させたい場合は、以下のように記述します。
// セッションの準備
$session = \Config\Services::session();
// 'user_name' という名前で保存された中身を取り出して、変数 $name に入れます
$name = $session->get('user_name');
// 画面に表示してみましょう
echo 'こんにちは、' . $name . 'さん!';
実行結果は以下のようになります。
こんにちは、田中太郎さん!
もし、指定した「キー」に何も保存されていない場合は、空っぽ(null)という状態が返ってきます。エラーになってプログラムが止まってしまうことはないので安心してくださいね。このように、setで保存し、getで取り出すというのが、セッション操作の最も基本的な流れになります。
5. 複数のデータをまとめて保存するテクニック
セッションには、一つの値だけでなく、たくさんの情報を一度に保存することもできます。例えば、ユーザーのID、名前、メールアドレスなどをまとめて保存したい場合です。これには「配列(はいれつ)」という、複数のデータをセットにする仕組みを使います。
バラバラにsetを何度も呼ぶよりも、まとめて保存した方がコードがスッキリして読みやすくなります。初心者の方は、まず「配列を使えば、たくさんの荷物を一つの大きな段ボールにまとめて預けられる」と想像してみてください。
$session = \Config\Services::session();
// 保存したい情報をまとめて「配列」にします
$userData = [
'user_id' => 123,
'user_role' => '管理者',
'is_logged_in' => true
];
// まとめてセッションに保存!
$session->set($userData);
echo 'ユーザー情報を一括で保存しました。';
このように書くことで、一気に3つの情報をセッションに登録することができました。これらは個別に$session->get('user_role')のように取り出すことが可能です。非常に効率的ですね。
6. 保存されているか確認する(hasメソッド)
プログラムを作っていると、「セッションにデータが入っている時だけ、この処理をしたい」という場面が出てきます。例えば、ログインしている時だけ会員専用のボタンを表示するようなケースです。そんな時に便利なのがhasという命令です。
hasは、指定したキーのデータが存在するかどうかを「はい(true)」か「いいえ(false)」で教えてくれます。これをPHPのif文(もしも〜なら)と組み合わせることで、賢いプログラムが作れます。
$session = \Config\Services::session();
// 'user_id' がセッションに存在するかチェックします
if ($session->has('user_id')) {
echo 'ログイン済みです。マイページへどうぞ!';
} else {
echo 'ログインしていません。ログインしてください。';
}
このチェックを行うことで、データがないのに取り出そうとして表示がおかしくなるのを防ぐことができます。プログラミングにおいて、事前に「あるかどうか」を確認することは、バグ(プログラムのミス)を減らすためのとても大切な習慣です。
7. セッションのデータを削除する方法(removeメソッド)
保存したデータが不要になったら、削除することも忘れてはいけません。代表的な例は「ログアウト」です。ログアウトしたのに、セッションに名前が残ったままだとセキュリティ上も良くありません。データを消すにはremoveという命令を使います。
$session = \Config\Services::session();
// 'user_name' のデータを削除します
$session->remove('user_name');
echo 'セッションデータを削除しました。';
また、セッションに入っている全てのデータを一度に消去して、真っさらな状態に戻したい時はdestroy(デストロイ)という強力な命令もあります。用途に合わせて、特定のデータだけを消すのか、全部消すのかを使い分けましょう。ロッカーの中身を一つだけ取り出すのか、ロッカーを解約して空にするのかの違いに似ていますね。
8. セッションを使う際の注意点とセキュリティ
セッションは非常に便利ですが、注意点もあります。セッション情報はサーバー側に保存されますが、誰のセッションかを識別するために「セッションID」という番号がユーザーのブラウザ(Google ChromeやSafariなど)に保存されます。この番号が盗まれると、他人が自分になりすましてログインできてしまう危険があります。
CodeIgniterでは標準で多くのセキュリティ対策が施されていますが、私たち開発者が意識すべきことは「個人情報などの極めて重要なデータをそのままセッションに入れすぎないこと」です。また、セッションには有効期限があり、一定時間操作をしないと自動的に消去されるようになっています。これは、公共のパソコンなどでログインしっぱなしになるのを防ぐための安全機能です。
初心者の方は、まずは「セッションは便利だけど、使い終わったら消す(ログアウトさせる)」「大切な情報は慎重に扱う」という二点を意識しておけば、安全なWebサイト作りの第一歩を踏み出せます。