クライアントのやり取りを、セッションを利用して管理します。
早速ですがSessionクラスの機能を実装していきましょう。
コンストラクター
セッションが開始されているか確認して、開始していなければ開始します。
そのため、セッションの状態を保持するプロパティをクラスに用意して、セッションを開始したらtrueにします。
なお、このプロパティは状態を保持するので静的プロパティにします。
class Session{
protected static $_sessionFlg = false;
public function __construct(){
if(!self::$_sessionFlg){
session_start();
self::$_sessionFlg = true;
}
}
}
スーパーグローバル変数$_SESSIONの設定と取得を行う
$_SESSION変数にデータを設定、取得するメソッドを定義し、サインインしたユーザーのデータを読み込み、そのデータを保管するというように利用します。これはセッターとゲッターで行います。
public function set($key, $val) {
$_SESSION[$key] = $val;
}
public function get($key, $param = null){
//$_SESSIION変数に指定されたキーがあれば値を返す
if(isset($_SESSION[$key])){
return $_SESSION[$key];
} else {
return $param;
}
}
generateSession()メソッドでIDを生成
セッションIDが生成済みかどうかを保持するプロパティを用意する。セッションID生成後はそのプロパティをtrueにします。
public function generationSession(){
if(!self::$_generatedFlg){
//$_generatedFlgがfalseであれば古いIDを削除し、IDを生成
session_regenerate_id(true);
self::$_generatedFlg = ture;
}
}
セッション開始時の処理とサインイン中の判定を行う
ここでの処理は以下の通り
- セッション開始時にメソッドを呼び出し、その中でセッションIDを生成するとともにサインイン中であることを示すためのキーと値を$_SESSIONに格納
- $_SESSIONに格納されているサインイン中かどうかの値を返す
public function setAuthStatus($flg){
//set()を呼び出し、_authenticatedキーと$flgの値を設定
$this->set('_authenticated', (bool)$flg);
//generateSession()でセッションIDを生成
$this->generateSession();
}
public function isAuth(){
//_authenticatedキーを取得してログイン中なら_authenticatedの値true
//ログイン中でなければfalseを返す
return $this->get('_authenticated', false);
}
$_SESSION変数を初期化する機能も用意する
$_SESSION変数自体を空にしてユーザーデータを空にするメソッドを定義します。
public function clear(){
//空の配列で初期化
$_SESSION = array();
}
Sessionクラスのコードまとめ
Sessionクラスのコードは以下の通り
<?php
class Session{
protected static $_sessionFlg = false;
protected static $_generatedFlg = false;
public function __construct(){
if(!self::$_sessionFlg){
session_start();
self::$_sessionFlg = true;
}
}
public function set($key, $val) {
$_SESSION[$key] = $val;
}
public function get($key, $param = null){
//$_SESSIION変数に指定されたキーがあれば値を返す
if(isset($_SESSION[$key])){
return $_SESSION[$key];
} else {
return $param;
}
}
public function generationSession(){
if(!self::$_generatedFlg){
//$_generatedFlgがfalseであれば古いIDを削除し、IDを生成
session_regenerate_id(true);
self::$_generatedFlg = ture;
}
}
public function setAuthStatus($flg){
//set()を呼び出し、_authenticatedキーと$flgの値を設定
$this->set('_authenticated', (bool)$flg);
//generateSession()でセッションIDを生成
$this->generateSession();
}
public function isAuth(){
//_authenticatedキーを取得してログイン中なら_authenticatedの値true
//ログイン中でなければfalseを返す
return $this->get('_authenticated', false);
}
public function clear(){
//空の配列で初期化
$_SESSION = array();
}
}
?>
コメント