CodeIgniter

CodeIgniterでセッションデータをデータベースに保存する

更新日:

会員専用サイトや社内専用サイト等をCodeIgniterで作成しようと思っている人は、セキュリティの面からもセッションデータをデータベースに保存する必要があります。ユーザのクッキーの中に保管されるセッションデータの配列にはセッションIDが含まれていますが、セッションIDを検証するには、データベースに保存されているセッションデータが必要だからです。

セッションデータがデータベースで利用可能なとき、正しい形式のセッションがユーザのクッキーの中にあった場合は、データベースのクエリでそれを照合します。 セッションIDが不一致の場合は、セッションが破棄されます。 セッションIDは更新されることがなく、新しいセッションが作成されるときに生成されます。(CodeIgniterユーザガイド日本語版のサイトより)

それでは、まず最初にphpMySQLでセッション保存用のデータベーステーブルを作成します。phpMyAdminにアクセスし、データベース名をクリックしたら、新しいテーブルを作成する画面が表示されますので、名前を『ci_sessions』、フィールド数を『5』と入力して、『実行する』ボタンをクリックします。

フィールド名を『session_id』『ip_address』『user_agent』『last_activity』『user_data』で下記のように作成します。

SQLで作成するには、下記のように作成してください。phpMySQLで『SQL』タブをクリックし、中のテキストフィールドに下記のコードをコピー&ペーストして『実行する』ボタンをクリックしてください。

CREATE TABLE `ci_sessions` (
session_id varchar(40) DEFAULT '0' NOT NULL,
ip_address varchar(16) DEFAULT '0' NOT NULL,
user_agent varchar(50) NOT NULL,
last_activity int(10) unsigned DEFAULT 0 NOT NULL,
user_data text DEFAULT '' NOT NULL,
PRIMARY KEY (session_id)
);

次に、『application/config』フォルダの『config.php』ファイルの251行目『config['sess_use_database']=FALSE;』のFALSEをTRUEに変更します。

それでは、実際にデータベースにセッションデータが保存されるかどうか確認してみましょう。前回、『CodeIgniterでセッション管理』で作成したコントローラ『counter.php』のURIをブラウザに入力してみます。

データベースにどのように保存されているか確認してみます。ブラウザをもうひとつ開いてその違いも見てみました。 『user_data』にカウンターの回数も表示されています。

とても簡単です。また『セッションクラスには、有効期限切れのセッションをクリアする組み込みガベージコレクションがありますので、独自のクリア処理を書く必要はありません。(CodeIgniterユーザーガイド日本語版サイトより)』とありますので、とても便利です。

今日は、ここまでにします。

-CodeIgniter
-

Copyright© WinRoad徒然草 , 2018 All Rights Reserved Powered by AFFINGER5.