SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

目的に応じて適材適所で使うPHPライブラリ

PHPで作成する携帯会員サイトの基本

目的に応じて適材適所で使うPHPライブラリ(11)


  • X ポスト
  • このエントリーをはてなブックマークに追加

ダウンロード sample.zip (14.7 KB)

セッション管理クラスの作成

 PHPのセッション関数をそのまま書いていくとコードが煩雑になりがちです。

 PHPのセッション管理機能を包括するライブラリにHTTP_Session、HTTP_Session2というライブラリがあります。

 HTTP_Session2ライブラリはHTTP_Sessionライブラリの後継にあたるPHP5向けのライブラリで、session_* 系の関数へのオブジェクト指向的なインターフェイスを持ち、データベースをコンテナに利用(後述)したり有効期限やアイドル時間を設定できる機能を持っています。

 本サンプルではこのHTTP_Session2を利用してセッション管理クラスを作成します。

 セッション管理ライブラリHTTP_Session2の主なメソッドは以下のとおりです。

HTTP_Session2の主なメソッド
メソッド名 意味
start() セッションを開始する
id() セッションIDの値を参照する
name(string $name) セッションIDの名前を設定する $name指定がない場合は「SessionID」がセッションID名となる
set( string $name, mixed $value ) セッションに$name, $valueのペアで名前と値を設定する
setExpire( 秒数 ) セッションの有効期間を設定する
setIdle( 秒数 ) セッションのアイドル時間を設定する
setContainer( string $container, [array $container_options = null]) セッションのデータをデータベースに保存する(後述)
useCookies( true / false ) クッキーを使用する / 使用しない
useTransSID( true / false ) session.use_trans_sidパラメータを使用する / 使用しない デフォルトが「true」
regenerateId( true / false ) 古いセッション情報を破棄して / 破棄せずに セッションIDを再生成する デフォルトが「false」ry

 HTTP_Session2ではセッションをDBに保存する機能があります。

 保存するDBの形式を「コンテナ」といい、String型の変数で指定します。さらにその際のDSN設定やテーブル名などを「コンテナオプション」として配列で指定します。

 コンテナの種類にはDB、MDBがあります。

 本記事ではこの機能は利用しませんので、詳しくはPEARの解説ページを参照してください。

 HTTP_Session2を使って、各画面から呼び出すセッションを管理するクラスをSessionの名前で作成します。

 具体的にはコンストラクタの部分でconfig.phpの読み込みとHTTP_Session2の初期設定、セッションの開始を行い、ログイン後にセッションにデータを置くメソッド、他HTTP_Session2のメソッドを利用してセッションの取得、セッションの破棄のメソッドを作成します。

リスト8 Session.class.php(抜粋)
/**
 * コンストラクタ
 */
function Session(){
    // 設定ファイル読み込み
    include('config.php');
    //クッキーを使用しない
    HTTP_Session2::useCookies(false);
    // セッション開始
    HTTP_Session2::start();
}
/**
 * ログイン
 */
function login($user_id, $password){
    $pdo = new PDO(dbType.":host=".MYSQL_HOST."; dbname=".MYSQL_DATABASE, MYSQL_USER,   MYSQL_PASSWORD);
    $stmt = $pdo->prepare("SELECT id, user_id, user_name, uid FROM user where user_id = ? AND password = ?");
    $stmt->execute(array($user_id, md5(str . $password)));
    $rowCount = $stmt->rowCount();
    // userテーブルにデータが存在した場合はセッションに置く
    if($rowCount){
        $row = $stmt->fetch(PDO::FETCH_ASSOC);
        HTTP_Session2::set('user', $row);
    }
    return $rowCount;
}
/**
 * かんたんログイン
 */
function easyLogin($uid){
    # 端末IDをキーとしてloginメソッドと同様にユーザーデータを取得してセッションに置く
}

/**
 * セッション上のユーザー情報を返却
 */
function getSession(){
    return HTTP_Session2::get('user');
}

/**
 * ログインしているか?
 */
function isLogin()
{
    $_user = HTTP_Session2::get('user');
    $return = (isset($_user['id'])) ? true : false;
    return $return;
}

/**
 * セッション破棄
 */
function destroy(){
    HTTP_Session2::destroy();
}

 セッション内に「user」というキーでユーザーのデータを置いています。

 ユーザーデータを取得する際には「user」のキーでセッションからデータを取得します。

次のページ
ログイン

修正履歴

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
目的に応じて適材適所で使うPHPライブラリ連載記事一覧

もっと読む

この記事の著者

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/5430 2010/10/18 14:50

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング