CodeIgniterのセッション管理を徹底解説!初心者でもわかる基本の仕組み
生徒
「Webサイトでログイン状態が続くのって、どういう仕組みなんですか?」
先生
「それは『セッション』という仕組みを使っています。CodeIgniter(コードイグナイター)という道具を使うと、それがとても簡単に管理できるんですよ。」
生徒
「セッションって、何だか難しそうですね。初心者でも使えますか?」
先生
「大丈夫です!まずはセッションがどんな役割を持っているのか、基本的なところから順番に学んでいきましょう!」
1. セッションとは何か?データの「預かり所」を理解しよう
インターネットで買い物をしたり、SNSにログインしたりするとき、ページを移動しても自分の名前が表示され続けたり、カートの中身が消えなかったりしますよね。実は、インターネットの世界(HTTP通信といいます)は、本来「一回きりの使い捨て」のやり取りなんです。一度ページを表示したら、サーバー(情報を送ってくれる大きなパソコン)はあなたのことをすぐに忘れてしまいます。
これでは、ページをめくるたびにログインし直さなければならず、とても不便です。そこで登場するのがセッション(Session)です。セッションとは、サーバー側で「この人はAさんだ」「この人は今これをカートに入れた」という情報を一時的に保存しておくための仕組みのことです。例えるなら、遊園地の手荷物預かり所のようなものです。入り口で荷物を預けて番号札をもらえば、園内のどこへ行ってもその番号札を見せるだけで自分の荷物を取り出せますよね。この「番号札」がセッションID、「預けた荷物」がセッションデータにあたります。
PHPというプログラミング言語を使ってWebサイトを作る際、このセッションをより便利に、安全に扱えるようにしてくれるのがCodeIgniter(コードイグナイター)というフレームワークです。フレームワークとは、よく使う機能をひとまとめにした便利な道具箱のようなものだと考えてください。
2. CodeIgniterのセッションライブラリを準備する
CodeIgniterでセッション機能を使うには、まず「セッションライブラリ」を読み込む必要があります。ライブラリとは、特定の機能を持ったプログラムの部品のことです。CodeIgniter 4(最新版)では、自動的に読み込まれる設定にすることもできますが、まずはプログラムの中で「今からセッションを使いますよ!」と宣言する方法を知っておきましょう。
この準備をすることで、データを保存したり、保存したデータを取り出したりすることができるようになります。難しい設定をしなくても、簡単な命令(コード)を書くだけで高度な管理ができるのがCodeIgniterの素晴らしい点です。以下のコードは、コントローラーというプログラムの制御塔のような場所でセッションを起動する例です。
// セッションサービスを呼び出して、変数 $session に入れる
$session = \Config\Services::session();
// これで準備完了!
echo 'セッションの準備ができました。';
このように書くだけで、複雑な裏側の処理を意識せずにセッションを開始できます。プログラミング未経験の方でも、この「一行のおまじない」からすべてが始まると覚えておけば大丈夫です。
3. データを保存する方法(setメソッド)
セッションの準備ができたら、次は実際にデータを保存してみましょう。CodeIgniterでは set という命令を使います。保存したいデータには、必ず「名前(キー)」を付けます。これは、預かり所の棚に「名前ラベル」を貼るようなイメージです。
例えば、ログインしたユーザーの名前を保存したい場合は、「user_name」というラベルを貼って、中身に「田中太郎」という値を入れる、といった具合です。一度保存されたデータは、ブラウザを閉じるか、有効期限が切れるまでサーバーに保持され続けます。
$session = \Config\Services::session();
// 'username' という名前に '侍 太郎' という値を保存する
$newdata = [
'username' => '侍 太郎',
'email' => 'taro@example.com',
'logged_in' => true,
];
$session->set($newdata);
echo 'ユーザー情報をセッションに保存しました!';
上記のコードでは、配列(複数のデータをまとめたもの)を使って、一度にたくさんの情報を保存しています。もちろん、一つずつ保存することも可能です。これで、他のページに移動しても「侍 太郎」さんの情報をいつでも呼び出せるようになりました。
4. 保存したデータを取り出す方法(getメソッド)
保存したデータを取り出すときは、先ほど付けた「名前(キー)」を指定します。これには get という命令を使います。もし指定した名前のデータが存在しない場合は、空っぽ(null)が返ってきます。
これを利用すれば、「もしセッションに名前が入っていたら、こんにちは〇〇さん!と表示する。入っていなければ、ゲストさん!と表示する」といった条件分岐が作れます。これがWebサイトのパーソナライズ(個人に合わせた表示)の基本です。
$session = \Config\Services::session();
// 'username' という名前で保存されているデータを取り出す
$name = $session->get('username');
if ($name) {
echo 'こんにちは、' . $name . 'さん!';
} else {
echo 'こんにちは、ゲストさん!';
}
こんにちは、侍 太郎さん!
実行結果を見ると、先ほど保存した「侍 太郎」という名前がしっかり表示されていますね。パソコンを触ったことがない方でも、「箱に名前を書いて入れておき、後でその名前を呼んで中身を出す」という流れだと考えれば分かりやすいはずです。
5. 一時的なメッセージを表示する「フラッシュデータ」
セッションの非常に便利な使い方の一つに、フラッシュデータ(Flashdata)があります。これは「次のページを表示したときだけ有効で、そのあとは自動的に消える」という特殊なデータです。よく見かける「お問い合わせを送信しました」や「ログインに失敗しました」といった、一度だけ表示すれば十分なメッセージに最適です。
普通のセッションデータはずっと残り続けますが、フラッシュデータを使えば、自分で消去するプログラムを書く手間が省けます。情報の消し忘れを防げるため、非常に安全でスマートな機能です。
$session = \Config\Services::session();
// 'success_msg' という名前で、一度きりのメッセージを保存
$session->setFlashdata('success_msg', '更新が完了しました!');
// 画面に表示する(この表示が終わるとデータは自動で削除される)
echo $session->getFlashdata('success_msg');
この機能があるおかげで、ユーザーがページを更新(リロード)したときに、同じメッセージが何度も何度も表示されて邪魔になることを防げます。Webアプリ開発では必須級の機能です。
6. データを削除する方法(removeメソッド)
セッションデータは便利ですが、不要になったら消すことも大切です。例えば、ログアウト機能を作る場合は、保存していたユーザー情報を消去する必要があります。CodeIgniterでは remove という命令を使って、特定のデータを削除できます。
また、すべてのセッションデータを一度に消して、セッション自体を終了させたい場合は destroy という命令を使います。これは、ホテルのチェックアウトのようなものです。部屋に置いた荷物をすべて片付けて、鍵を返すイメージですね。
$session = \Config\Services::session();
// 'username' だけを削除する
$session->remove('username');
// すべてのセッションを破棄して完全に削除する場合
// $session->destroy();
echo 'セッション情報を削除しました。';
適切にデータを削除することは、セキュリティを高めるためにも重要です。他の人が同じパソコンを使ったときに、前の人の情報が見えてしまったら大変ですからね。ログイン機能を作る際は、必ずセットでログアウト(データ削除)の処理も考えるようにしましょう。
7. セッションの保存先はどこ?(データベースとファイル)
少し発展的なお話ですが、セッションデータがサーバーの「どこ」に保存されるのかについても知っておくと役立ちます。CodeIgniterでは、主に2つの保存場所を選べます。
- ファイル保存: サーバー内の特定のフォルダにテキストファイルとして保存します。小規模なサイトではこれが一般的です。
- データベース保存: MySQLなどのデータベースの中に保存します。複数のサーバーを動かすような大きなサイトや、より高い信頼性が必要な場合に適しています。
初心者のうちは、デフォルト(初期設定)のファイル保存で全く問題ありません。CodeIgniterの設定ファイル(app/Config/App.phpなど)を少し書き換えるだけで、これらの保存先を簡単に切り替えることができます。このように、後から柔軟に変更できるのがプログラミングの面白いところです。
8. セッションを安全に使うための注意点
最後に、セッションを扱う上での「安全(セキュリティ)」について触れておきます。セッションID(番号札)が悪い人に盗まれてしまうと、あなたになりすましてサイトを操作されてしまう危険があります。これを「セッションハイジャック」と呼びます。
CodeIgniterには、これを防ぐための仕組みが最初から備わっています。例えば、一定時間ごとに番号札を新しく作り直す「セッションの再生成」機能などです。また、自分でも意識できる点として、「セッションにはパスワードなどの超重要情報をそのまま保存しない」というルールを守りましょう。セッションには「誰であるか」を示す最低限の情報を入れ、詳細な機密情報はデータベースに隠しておくのがプロの作り方です。
難しい言葉がたくさん出てきましたが、CodeIgniterというツールが、こうした難しいセキュリティの部分も大部分を肩代わりして守ってくれているのです。だからこそ、初心者の方でも安心して開発を始めることができるんですね。