CodeIgniterでファイルセッションを使う方法!初心者向け完全ガイド
生徒
「CodeIgniterでログイン状態を保存したいのですが、どうすればいいですか?」
先生
「それには『セッション』という仕組みを使います。今回は一番基本となる『ファイル』に保存する方法を解説しますね。」
生徒
「ファイルセッション…難しそうですね。初心者でも設定できますか?」
先生
「大丈夫ですよ!設定ファイルを少し書き換えるだけで、誰でも簡単に使い始めることができます。それでは、基本的な使い方を見ていきましょう!」
1. セッション(Session)とは何か?
プログラミングの世界で、あるいはウェブサイトを利用していて「ログインしたままにする」という体験をしたことはありませんか?例えば、SNSを開くたびにメールアドレスとパスワードを入力するのは大変ですよね。これを解決するのがセッションという仕組みです。
通常、インターネットの通信(HTTPといいます)は「一回切り」のやり取りです。サーバーは「さっきアクセスしてきた人と、今の人は同じ人かな?」ということが分かりません。そこで、サーバー側に「この人は田中さんですよ」という名札(データ)を一時的に保管しておきます。この「名札を保管する期間や仕組み」のことをセッションと呼びます。
CodeIgniter(コードイグナイター)というPHPのフレームワークを使えば、この複雑な仕組みをとてもシンプルに扱うことができます。フレームワークとは、開発を楽にするための「便利な道具セット」のようなものです。パソコンを初めて触る方でも、この道具を使えばプロのような機能が作れます。
2. ファイルセッションの特徴とメリット
セッション情報の保存先にはいくつか種類がありますが、最も一般的で手軽なのが「ファイル」に保存する方法です。サーバーの中にある特定のフォルダに、テキストファイルとしてユーザーの情報を書き込みます。
ファイルセッションの大きなメリットは、データベースの設定が不要である点です。データベース(情報を整理して保管する巨大な倉庫のようなもの)の知識がなくても、フォルダさえ準備すればすぐに動きます。小規模なサイトや、これからプログラミングの学習を始める初心者の方には、このファイルセッションが最もおすすめです。
ただし、アクセス数が非常に多いサイト(1秒間に何千人も訪れるようなサイト)では、ファイルの読み書きが追いつかなくなることがありますが、学習段階では全く気にする必要はありません。まずは基本をしっかり押さえましょう。
3. 準備:保存先のフォルダを作成しよう
ファイルセッションを使うためには、まず「セッション情報を書き込むための箱(フォルダ)」をサーバー内に用意する必要があります。これを忘れると、プログラムが「どこに書けばいいの?」と迷ってエラーを出してしまいます。
CodeIgniterのプロジェクトフォルダの中に、例えば writable/session という名前でフォルダを作ります。そして、大事なのが書き込み権限(パーミッション)の設定です。これは、パソコンに対して「このフォルダには自由に出し入れしていいよ」と許可を与える作業です。これを設定しないと、プログラムが情報を保存できなくなります。
4. 設定ファイル(App.php)を編集する
次に、CodeIgniterの設定を変更します。app/Config/App.php というファイルを開いてください。このファイルは、アプリ全体のルールを決める「校則本」のようなものです。
探し出す項目は public $sessionDriver です。ここを 'CodeIgniter\Session\Handlers\FileHandler' に設定します。次に、保存場所を指定する public $sessionSavePath に、先ほど作ったフォルダのパス(場所)を書き込みます。
実際のコード例を見てみましょう。このように記述します。
// app/Config/App.php の中身のイメージ
public $sessionDriver = 'CodeIgniter\Session\Handlers\FileHandler';
public $sessionSavePath = WRITEPATH . 'session'; // writableフォルダ内のsessionを指定
public $sessionExpiration = 7200; // セッションの有効期限(秒)
これで、CodeIgniterは「セッションはファイルで、あのフォルダに保存するんだな」と理解してくれます。WRITEPATH というのは、CodeIgniterが最初から知っている「書き込み用フォルダの場所」を指す便利な言葉です。
5. セッションライブラリを読み込む方法
設定が終わったら、実際にプログラムの中でセッションを使えるように呼び出します。CodeIgniterでは「ライブラリ」という部品を呼び出すことで機能が使えるようになります。これをインスタンス化と呼んだりしますが、今は「魔法の杖を手に取る」イメージで大丈夫です。
コントローラー(プログラムの司令塔となるファイル)の中で以下のように記述します。
namespace App\Controllers;
use CodeIgniter\Controller;
class Home extends Controller
{
public function index()
{
// セッション機能を起動する!
$session = \Config\Services::session();
// これで $session という変数を使って、データの保存や取得ができます
echo "セッションが準備できました!";
}
}
この \Config\Services::session() という一文が、セッションを開始するための合言葉です。これ以降は、ユーザーの情報を自由に出し入れできるようになります。
6. データを保存する方法(set)
いよいよ、データを保存してみましょう。例えば、ログインしたユーザーの名前を保存したい場合、set という命令を使います。これは「箱に名前を書いて、中身を入れる」作業に似ています。
例えば、「user_name」という名前の付いた箱に、「たろう」という文字を入れてみます。以下のコードを見てください。
public function login()
{
$session = \Config\Services::session();
// ユーザー情報をセッションに保存する
$data = [
'user_id' => 123,
'user_name' => 'たろう',
'is_logged_in' => true
];
$session->set($data);
echo "データを保存しました。";
}
このように、複数の情報をまとめて一度に保存することもできます。一度保存してしまえば、別のページに移動しても「たろう」という情報は消えずに残ります。これがセッションのすごいところです!
7. データを取得する方法(get)
保存したデータを取り出すには、get という命令を使います。これは「指定した名前の箱を開けて、中身を見る」作業です。もし、その名前の箱がなければ、空っぽ(null)を返してくれます。
public function profile()
{
$session = \Config\Services::session();
// 保存されている名前を取り出す
$name = $session->get('user_name');
if ($name) {
echo "こんにちは、" . $name . "さん!";
} else {
echo "ログインしていません。";
}
}
このプログラムを実行すると、先ほど保存した「たろう」という文字が表示されます。ページをリロードしても、ブラウザを閉じない限り情報は保持され続けます。これがユーザーごとにパーソナライズされた(その人に合わせた)表示を可能にする仕組みです。
8. データを削除する方法(removeとdestroy)
最後に、不要になった情報を消す方法を学びましょう。ログアウトするときなどは、保存した情報を消す必要があります。特定の情報だけ消したいときは remove、全ての情報をリセットしたいときは destroy を使います。
public function logout()
{
$session = \Config\Services::session();
// 1. 特定のデータだけ消す場合
$session->remove('user_name');
// 2. セッションの全てのデータを完全に消去(ログアウトなど)
$session->destroy();
echo "ログアウトしました。情報はすべて消去されました。";
}
これでお片付けもバッチリです。セッションの管理ができるようになると、会員制サイトやショッピングカートなど、本格的なウェブアプリの制作が一気に現実味を帯びてきます。最初は難しく感じるかもしれませんが、「名札の付いた箱にデータを入れたり出したりしているだけ」と考えれば、とてもシンプルに感じられませんか?