ダウンロード sample.zip (14.7 KB)
セッション管理クラスの作成
PHPのセッション関数をそのまま書いていくとコードが煩雑になりがちです。
PHPのセッション管理機能を包括するライブラリにHTTP_Session、HTTP_Session2というライブラリがあります。
HTTP_Session2ライブラリはHTTP_Sessionライブラリの後継にあたるPHP5向けのライブラリで、session_* 系の関数へのオブジェクト指向的なインターフェイスを持ち、データベースをコンテナに利用(後述)したり有効期限やアイドル時間を設定できる機能を持っています。
本サンプルではこの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のメソッドを利用してセッションの取得、セッションの破棄のメソッドを作成します。
/**
* コンストラクタ
*/
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」のキーでセッションからデータを取得します。
- 修正履歴
-
- 2010/10/11 22:48 PHP内部文字コードと出力文字コードを分ける処理を追加
- 2010/10/07 17:01 パスワード保存時の処理を変更
- 2010/10/06 14:15 かんたんログイン利用時の注意点を追加
- 2010/10/03 22:44 MySQLへの接続の際の文字コード指定、簡単ログインの際に携帯キャリアのIPアドレスか判定する処理を追加
この記事は参考になりましたか?
- 目的に応じて適材適所で使うPHPライブラリ連載記事一覧
-
- PHPで作成する携帯会員サイトの基本
- PHPUnitでできる単体テスト
- 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本格入門」「これからはじめるLaravel実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数。
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
-
WINGSプロジェクト 片渕 彼富(カタフチ カノトミ)
<WINGSプロジェクトについて>有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。 2026年時点での登録メンバは約50名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書、記事多数。 RSS X: @WingsPro_info(公式)、@WingsPro_info/wings(メンバーリスト) Facebook
※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です
この記事は参考になりましたか?
この記事をシェア
