セッション情報を管理するSessionクラス

MVCフレームワーク

クライアントのやり取りを、セッションを利用して管理します。
早速ですが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();
    }
}

?>

コメント

タイトルとURLをコピーしました