CodeIgniterセッション管理入門!ドライバの種類と違いを徹底解説
生徒
「Webサイトでログイン状態を維持する『セッション』って、具体的にどこに保存されているんですか?」
先生
「CodeIgniter(コードイグナイター)では、セッションドライバという仕組みを使って、保存先を自由に選べるようになっています。」
生徒
「保存する場所によって、何か違いがあるのでしょうか?」
先生
「もちろんです!速度や安全性、扱いやすさが変わってきます。それぞれの特徴を詳しく学んでいきましょう。」
1. セッションとは何か?をイメージで理解しよう
プログラミングの世界でよく聞く「セッション(Session)」とは、一言でいうと「Webサイトが訪問者を識別するための仕組み」です。通常、インターネットの通信は一回ごとに完結してしまうため、ページを移動すると「さっきまで操作していた人」という記憶が消えてしまいます。これを防ぐために、サーバー側に一時的な荷物預かり所を作るのがセッションの役割です。
例えば、ネットショップでカートに商品を入れたり、マイページにログインしたまま別のページを見たりできるのは、このセッション機能があるおかげです。CodeIgniterというPHPのフレームワーク(アプリを作るための道具箱)では、この「荷物(データ)」をどこに置くかを決める設定を「セッションドライバ」と呼びます。
2. セッションドライバの役割と種類
CodeIgniterで用意されている主なセッションドライバには、File(ファイル)、Database(データベース)、Redis(レディス)、Memcached(メムキャッシュディー)などがあります。これらは、データの「保存先」が異なります。パソコンに詳しくない方向けに例えると、書類を「机の引き出し(ファイル)」にしまうのか、「大きな倉庫(データベース)」に預けるのか、「超高速な魔法の箱(Redis)」に入れるのか、という違いです。
まずは、最も標準的で設定が簡単な「Fileドライバ」の書き方を見てみましょう。設定ファイル(app/Config/App.phpなど)で指定します。
// セッションドライバをファイルに設定する例
public $sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler';
public $sessionSavePath = WRITEPATH . 'session';
3. File(ファイル)ドライバの特徴とメリット
Fileドライバは、CodeIgniterの標準設定としてよく使われるものです。サーバーの中にある「ファイル」としてセッション情報を書き込みます。初心者にとっての最大のメリットは「準備が何もいらない」ことです。特別なデータベースやサーバーソフトを新しく用意しなくても、すぐに使い始めることができます。
ただし、デメリットもあります。アクセス数が非常に多い大規模なサイトになると、ファイルへの読み書きが追いつかなくなり、動作が重くなってしまうことがあります。また、複数のサーバーでサイトを運営する場合、別のサーバーにあるファイルは見ることができないため、工夫が必要になります。まずは練習用のアプリや、小規模なサイトで使うのに最適です。
4. Database(データベース)ドライバで管理する
Databaseドライバは、その名の通り、MySQLなどのデータベースの中にセッション情報を保存する方法です。データを表形式で管理するため、後から「今誰がログインしているか」といった情報を検索したり、整理したりするのが得意です。
データベースを使うためには、あらかじめ専用の「テーブル(情報を入れるための枠組み)」を作っておく必要があります。プログラム側では以下のように設定を変更します。
// セッションドライバをデータベースに設定する例
public $sessionDriver = 'CodeIgniter\Session\Handlers\DatabaseHandler';
public $sessionSavePath = 'ci_sessions'; // 保存するテーブル名
ファイル保存に比べて、複数のサーバーから同じデータベースを見に行けるため、少し規模の大きいサイトでも安心して使えます。ただし、データベースへの接続が発生するため、設定ミスには注意が必要です。
5. Redis(レディス)ドライバで高速化を目指す
Redisドライバは、プロの現場でよく使われる非常に高速な保存方法です。Redisは「インメモリデータベース」と呼ばれ、ハードディスクではなく、より高速な「メモリ(一時的にデータを広げる場所)」に情報を保存します。これにより、一瞬でデータの出し入れが完了します。
SNSやリアルタイムのゲームなど、一秒間に何万人もがアクセスするようなサイトでは、このRedisが欠かせません。ただし、サーバー自体にRedisというソフトをインストールして設定する必要があるため、パソコン操作に慣れてきた中級者向けの選択肢と言えます。設定例は以下のようになります。
// セッションドライバをRedisに設定する例
public $sessionDriver = 'CodeIgniter\Session\Handlers\RedisHandler';
public $sessionSavePath = 'tcp://127.0.0.1:6379'; // Redisサーバーの場所
6. 各ドライバの比較と選び方のポイント
どのドライバを使うべきか迷ったときは、以下の表を参考にしてみてください。それぞれの特性を理解して選ぶことが、良いWebアプリへの第一歩です。
| 種類 | 難易度 | 速度 | おすすめの用途 |
|---|---|---|---|
| File | ★☆☆(かんたん) | 普通 | 個人の練習、小規模サイト |
| Database | ★★☆(普通) | 普通 | 会員制サイト、中規模サイト |
| Redis | ★★★(難しい) | 爆速 | アクセスが多い大規模サイト |
7. セッションデータの書き込みと読み込み
ドライバの設定ができたら、実際にプログラムの中でセッションを使ってみましょう。CodeIgniterでは「session()」という便利な命令を使って、データの出し入れを行います。例えば、ユーザーの名前を保存して、次のページで表示するコードは以下のようになります。
// セッションにデータを保存する
$session = session();
$session->set('userName', 'たろう');
// セッションからデータを読み出す
$name = $session->get('userName');
echo $name . 'さん、こんにちは!';
実行結果は以下のようになります。
たろうさん、こんにちは!
このように、ドライバが何であっても(ファイルでもRedisでも)、プログラムの書き方自体は同じです。これがCodeIgniterの便利なところです。裏側の仕組みをドライバが隠してくれているので、開発者はデータの扱いだけに集中できます。
8. セッション管理で初心者が気をつけるべきこと
最後に、セッションを使う上での注意点をいくつか紹介します。まず、セッションには「個人情報」を直接入れすぎないことです。クレジットカード番号などは絶対に保存してはいけません。また、セッションには有効期限(タイムアウト)があります。一定時間操作がないと、自動的にログアウトするのはこの仕組みのためです。
また、セッションドライバを変更したときは、必ず動作確認をしてください。特にDatabaseドライバに変更した際に、テーブルを作り忘れてエラーになるのは「プログラミングあるある」です。一つずつ丁寧に確認しながら進めていきましょう。Web開発において、セッションはユーザーに寄り添うための大切な機能です。正しく理解して、使いやすいサイトを作ってみてくださいね。