目的に応じて適材適所で使うPHPライブラリ(11)
WINGSプロジェクト 片渕 彼富 [著] 山田 祥寛 [監修] 2010/10/01 14:00

サンプルファイル 12.43 KB
← 1 2 3 4 5 6 →

PHPでのセッション管理

 PHPでのセッション管理は1)クッキーを使う方式、2)内部リンクのURLの後ろに引数としてセッションIDを付与する方式(URL埋め込み方式)の2通りあります。

 前述のとおり、携帯電話の多くはクッキーにまだ対応していませんので2)のURL埋め込み方式をとります。

 php.iniに以下の2つのパラメーターを使って2)のURL埋め込み方式を実装します。

URL埋め込み方式で利用するパラメーター
パラメータ名意味
session.use_trans_sidセッションが有効な場合、セッションIDをURLに自動で付加する
session.use_cookiesセッションにクッキーを使用する

 それぞれ有効:1、無効:0の値で設定します。

 今回のサンプルは携帯が対象となるシステムなので「session.use_trans_sid」の他に「session.use_cookies」でクッキーにセッションを持たないようにして以下のようにphp.iniに設定します。

リスト2 php.iniの設定例
session.use_trans_sid = 1
session.use_cookies = 0

 レンタルサーバーの制約などでphp.iniの変更ができない場合はApacheの.htaccessで同じ設定ができます。

リスト3 .htaccessの設定例
php_flag session.use_trans_sid On
php_flag session.use_cookies Off

 上記の設定を行ってPHP内でセッションが開始された場合、リンクの後ろにはには「SESSID=XXXXX」、フォーム内には<input type="hidden" name="SESSID" value="XXXXX" />のようにセッションを遷移先の画面へ引き継げるようなIDと値のペアが自動で付加されます。

サンプル実行用のデータ作成

 以下のSQLを実行してテーブルを作成します。

リスト4 テーブルの作成
CREATE TABLE IF NOT EXISTS `user` (
  `id` int(11) NOT NULL auto_increment COMMENT 'ID',
  `user_id` varchar(255) NOT NULL COMMENT 'ユーザーID',
  `password` varchar(255) NOT NULL COMMENT 'パスワード',
  `user_name` varchar(255) default NULL COMMENT 'ユーザー名',
  `uid` varchar(255) NOT NULL COMMENT '携帯端末ID',
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;

 次にinsert.phpに携帯電話からアクセスして「user_id」「password」「user_name」を入力してテストデータを作成します。

 この際に携帯電話の端末IDも取得してユーザーデータを作成します。携帯端末で端末IDを送出しないように設定している場合は解除してからアクセスします。

 DB接続情報はconfig.phpに記述して、データ作成はPDOを用います。

リスト5 config.php
define('MYSQL_HOST' , 'MySQLサーバーのアドレス');
define('MYSQL_USER' , 'MySQLユーザー名');
define('MYSQL_PASSWORD' , 'MySQLユーザーのパスワード');
define('MYSQL_DATABASE' , 'データベース名');
define('dbType' , "mysql");
define('OPTION_CNF' , 'option.cnf');
リスト6 option.cnf
[client]
default-character-set=sjis
リスト7 insert.php(抜粋)
// ユーザーID取得
$user_id = $_POST['user_id'];
// パスワード取得
$password = $_POST['password'];
// ユーザー名取得
$user_name = $_POST['user_name'];

if($user_name){
    // 端末IDを取得
    $agent = Net_UserAgent_Mobile::singleton();
    $uid = $agent->getUID();
    // DB接続
    $pdo = new PDO(dbType.":host=".MYSQL_HOST."; dbname=".MYSQL_DATABASE, MYSQL_USER,   MYSQL_PASSWORD, 
                   array( PDO::MYSQL_ATTR_READ_DEFAULT_FILE => OPTION_CNF ));
    $stmt = $pdo->prepare("INSERT INTO user (user_id, password, user_name, uid) VALUES(:USER_ID, :PASSWORD, :USER_NAME, :UID)");
    // ユーザーデータ作成
    $stmt->bindValue(':USER_ID', $user_id);
    $stmt->bindValue(':PASSWORD', md5($password));
    $stmt->bindValue(':USER_NAME', $user_name);
    $stmt->bindValue(':UID', $uid);
    $stmt->execute();
}

MySQLのバージョンが5.07以上の場合、PDOの「PDO::MYSQL_ATTR_READ_DEFAULT_FILE」属性を利用して指定したファイルからオプションを読み込ませることが可能です。サンプルではMySQL接続時の文字コードをSJISにしています。 サンプルではconfig,php, option.cnfともにinsert.phpと同じディレクトリに配置しておりますが、実際のシステム開発ではドキュメントルートの外に配置して下さい。

テストデータ作成
テストデータ作成

 サンプルではユーザーID「123」、パスワード「abc」、ユーザー名「鳩山」で作成しています。


プロフィール
WINGSプロジェクト 片渕 彼富 カタフチ カノトミ

WINGSプロジェクトについて>
有限会社 WINGSプロジェクトが運営する、テクニカル執筆プロジェクト(代表 山田祥寛)。海外記事の翻訳から、主にWeb開発分野の書籍・
雑誌/Web記事の執筆、講演等を幅広く手がける。2008年8月時点での登録メンバは25名で、現在も一緒に執筆をできる有志を募集中。執筆に興味のある方は、どしどし応募頂きたい。著書多数


プロフィール
山田 祥寛 ヤマダ ヨシヒロ

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for ASP/ASP.NET。執筆コミュニティ「WINGSプロジェクト」代表。
主な著書に「入門シリーズ(サーバサイドAjax/XMLDB/PEAR/Smarty)」「独習シリーズ(ASP.NET/PHP)」「10日でおぼえる入門教室シリーズ(ASP.NET/PHP/Jakarta/JSP&サーブレット/XML)」「Pocket詳解辞典シリーズ(ASP.NET/PHP/Perl&CGI)」「今日からつかえるシリーズ(PHP/JSP&サーブレット/XML/ASP)」「書き込み式 SQLのドリル」他、著書多数


注目の求人情報
システムエンジニア/オンラインゲーム会社
◇こんな会社です: ・オンラインゲームの企画開発、運営を主な事業としています。自社開発コンテンツ...
システムエンジニア/人材紹介WEBポータル
・UNIX、Linuxベースの開発経験 ・PHP、JAVA、PostgreSQL、MySQLなどの経験2年以上 ・オブジェクト指...
コンサルタント/コンサルティング企業
エクセレントカンパニーを対象とし、全体最適の視点を持ったITのグランド・デザインから構築・運用ま...

(最新日付順)
名前(ゲストの方もコメントをどうぞ):*
アイコン:
なし

内容(テキストのみ1200文字まで):*

投稿規定に同意して

スポンサーサイト

この記事のトラックバックURL: