CodeIgniterでセッション管理

CodeIgniterは独自のセッション機能を持っており、PHPのセッション機能とは実装が異なります。また、PHPのセッションにはない機能も持っています。まず、最大の特徴は、デフォルトではデータをすべてクッキーに保存する点です。PHPのセッションがセッションIDのみをクッキーに保存するのに対し、CodeIgniterのセッションは、すべてのデータをクッキーに保存します。

※セッションとは、アクセス数の単位の一つで、Webサイトを訪れたユーザがサイト内で行う一連の行動をまとめて1セッションといいます。このセッションを、アクセス中のユーザの識別や行動の捕捉をするために固有の識別情報を付与し、ユーザがアクセスしたりログインした際に発行したり、一定時間アクセスが無かったりログアウトすると破棄したりする識別情報のことをセッションIDといい、そのセッション全般を管理することをセッション管理といいます。
※クッキーとは、Webサイトの提供者が、Webブラウザを通じて訪問者のコンピュータに一時的にデータを書き込んで保存させるしくみのことをいいます。考え方によっては、あなたのパソコンに勝手にWeb情報を保存する仕組みともいえます。しかし、Webサイトの提供者は、ユーザに関する情報や最後にサイトを訪れた日時、そのサイトの訪問回数などを記録しておくことで、きめの細かいサービスを提供することができるのです。

CodeIgneiterのセッションクラスは、各ユーザーのセッション情報を『シリアライズ』という方法で、テキストデータに変換し(オプションで暗号化して)、クッキーに保存します。また、セキュリティ強化のため、データベースに保存することも可能です。CodeIgniterのセッションが自動的に保存するデータには以下の4つがあります。

session_id

ユーザーを識別するためのユーザーIDでデフォルトでは、5分ごとに変更されます。

ip_address

ユーザーのIPアドレス

user_agent

ユーザーのWebブラウザ情報の最初の50文字

last_activity

ユーザーが最後にアクセスした日時ですが、この値は負荷軽減のため、5分以上経過した場合にのみ更新されます。

設定ファイルの変更

セッションクラスを使う前に、設定ファイル『config.php』の『$confit[‘encryption_key’]』に値を設定しておきます。この値は、暗号化クラスで使われる暗号化のための鍵ですが、クッキーに保存したセッションデータが改竄されていないかを検証するためにも必要です。半角記号英数字で32文字のランダムな文字列を指定しておきましょう。

『application/config/config.php』ファイルの227行目にランダムな32文字を入力します。

セッションクラスの読み込み

セッションクラスを使うには、まず、セッションクラスを読み込む必要があります。

$this->load->library(‘session’);

セッションを使いたい全てのページでこの処理を行う必要がありますので、ほとんどのページでセッションを使うサイト(会員サイト等)の場合は、自動読み込みにした方がいいでしょう。自動読み込みをセットするには、『application/config』フォルダ内の『config.php』ファイルを開き、55行目のarray()の中に、自動読み込みのライブラリ名を入力します。

$autoload[‘libraries’]=array(‘session’);

セッションデータの保存

セッションデータを保存するには、以下のメソッドを使います。

$this->session->set_userdata(‘項目名’,値);

自動的に保存される『session_id』『ip_address』『user_agent』『last_activity』を、項目名としてユーザーが使うことはできません。また、『flash_』で始まる項目名も予約されているので、使うことはできません。それ以外の項目名は、配列のキーに使える文字列なら自由に指定することができます。
又、連想配列を渡し、一度に複数の項目を保存することもできます。

$session[‘data1’]=$data1;
$session[‘data2’]=$data2;
$this->session->set_userdata($session); 

セッションデータの取得

セッションに保存したデータを取得するには、以下のメソッドを使用します。

$this->session->userdate(‘項目名’);

セッションデータの削除

セッションに保存したデータを削除するには、以下のメソッドを使用します。

$this->session->unset_userdata(‘項目名’);

尚、全てのセッションをクリアする場合は、最後に次のメソッドを呼び出してください。フラッシュデータも破棄されます。

$this->session->sess_destory();

セッションを利用したカウンタプログラム

CodeIgniterのセッションを利用した簡単なカウンターを作成してみます。『application/controllers』フォルダに『counter.php』ファイルを作成し、以下のコードを入力します。カウンタだけでなく、『session_id』『ip_address』『user_agent』『last_activity』が自動的に保存されているかどうかの確認のため、カウンタの下に表示してみました。

class Counter extends CI_Controller{
function index()
{
$this->load->library('session');

if(! $this->session->userdata('count')){
$this->session->set_userdata('count',1);
}else{
$count=$this->session->userdata('count');
$count++;
$this->session->set_userdata('count',$count);
}
echo 'アクセス回数は'.$this->session->userdata('count').'です<br>';
echo 'セッションID:'.$this->session->userdata('session_id').'<br>';
echo 'IPアドレス:'.$this->session->userdata('ip_address').'<br>';
echo 'ユーザーエージェント:'.$this->session->userdata('user_agent').'<br>';
echo '最終アクセス:'.$this->session->userdata('last_activity');
}
}

ブラウザで確認してみます。更新ボタンを押すたびに数字が1ずつ増えていくのがわかります。カウンタの下に、自動的に保存された『session_id』『ip_address』『user_agent』『last_activity』が表示されています。

ブラウザのクッキーを確認してみました。クッキー名に『ci_session』名で保存されています。

本日はここまでにします。

タグ

2011年7月29日 | コメント/トラックバック(0) |

カテゴリー:CodedIgniter

このページの先頭へ